in reply to Re: fork cant support Win32::OLE ?
in thread fork cant support Win32::OLE ?

Can I think threads is only/stable way to implement multi-processes snippet in Windows? and I can use threads to connect my snippet above even pass some info between them?




I am trying to improve my English skills, if you see a mistake please feel free to reply or /msg me a correction

Replies are listed 'Best First'.
Re^3: fork cant support Win32::OLE ?
by Corion (Patriarch) on Feb 10, 2010 at 17:29 UTC

    Yes, but again, sharing (Win32::OLE) resources across threads is not easy. But sharing information between threads is very easy if you use Thread::Queue to send information back and forth, for example. The best is to use OLE objects only in one thread. Also read the section on Win32::OLE->Initialize() and ->SpinMessageLoop documentation.

Re^3: fork cant support Win32::OLE ?
by ikegami (Patriarch) on Feb 10, 2010 at 17:33 UTC

    Can I think threads is only/stable way to implement multi-processes snippet in Windows?

    No, it's not the only one. In fact, it's not even one of them. Threads don't create processes.

    Neither does fork in Windows. It creates threads to emulate unix's fork.

    I can use threads to connect my snippet above even pass some info between them?

    Yes, through shared variables, pipes, sockets, files, etc. Thread::Queue is very useful if you're making worker threads.

    Considering the platform,

    Considering the platform, don't use fork. Windows doesn't support fork, so it's emulated. If you want to created threads, use threads instead.

    use warnings; use strict; use threads; use Win32::IEAutomation; use Win32::IEAutomation::WinClicker; async { my $clicker = Win32::IEAutomation::WinClicker->new(); # ... }; async { my $ie = Win32::IEAutomation->new( visible => 1, maximize => 1); # ... }; $_->join() for threads->list();

    Note that the above still suffers from your original problem. It's apparently related to threads, not just the fork emulation. (No surprise there.)