Threading in Perl is arguably the weakest part of the language. I do know of
successful implementations of a threaded win32::gui app, where one thread
handles GUI interaction, while the other does all the "work". I think if you
search the list you might be able to come across a couple of examples.
As an example of problems of a threaded perl application. Imagine you had an
object that encapsulated logic to process a text file. The initial
processing of this file takes a significant amount of time, so you want to
use a threaded model where the GUI is handled in one thread while the
processing of the object is in the other. All works well - however you can't
share perl objects between threads (only scalars)...Our newly processed text
file, is in one thread but can not be access directly - you have to use a
storable to serialise the data and copy it across...which can make the whole
exercise rather futile!
Hope that is of some help...
----- Original Message -----
From: "Brad Smith" <mata@...>
Sent: Wednesday, June 23, 2004 11:49 AM
Subject: [perl-win32-gui-users] Working with threads
> Yesterday, after finishing a gui, I started reading some old list postings
> on threads. I looked over my application and found a part of the code
> where I could test the threading (perl 5.8.x). Best part, it worked!
> I have been programming in Perl steadily for the past five years, and it
> has quickly become my language of choice. Up until now, I have
> proceeded in the linear fashion in which Perl works on win32, each task
> performed must be performed sequentially. Of course, I have always
> sacrificed speed and responsivity for versatility.
> Now, I would like to begin retrofitting some of my code to a threaded
> model, in part. I thought a good solution would be to try it with a gui,
> but I am stuck in my thinking, and have a few questions to ask, to gain
> 1. When using threading with win32::gui, would/could I create a thread
> for each gui component/object? For example, from my Master loop,
> could I create a thread that held a Window and every button, textfield,
> etc. contained inside the Window, while another thread held a Dialog
> Box with all of it's components (textfields, buttons, etc.)?
> 2. If I can, from where do I control the Show() method? I tried
> performing this from the Master Loop, but it said, of course, that my
> $Window didn't exist. Then, I tried passing the Show() through the
> thread (e.g. $sample_thread->$Window->Show();), but that didn't work
> 3. Instead of placing the $Window in threading, do I place the functions
> of $Window in the threading?
> 4. Does anyone have an example of threading with Win32::gui?
> If anyone is old enough to remember seeing their first Walkman (circa
> 1980), that is the similar feeling I am having with win32::gui and
> threads! For five years, I have used Perl for database processing, and
> cgi. Two years ago, I discovered the power of OLE. Now, I am
> revisiting GUI, and contemplating threads. Next, I might begin
> considering myself to be a programmer! :)
> Brad Smith
> This SF.Net email sponsored by Black Hat Briefings & Training.
> Attend Black Hat Briefings & Training, Las Vegas July 24-29 -
> digital self defense, top technical experts, no vendor pitches,
> unmatched networking opportunities. Visit http://www.blackhat.com
> Perl-Win32-GUI-Users mailing list