Threads and Tk,are NOT wrong, but they have to be done with alot of care. You cannot mix Tk code across threads, and all threads must be created before any Tk code is invoked in the main thread. See Tk-with-worker-threads or this simple example:
#!/usr/bin/perl
use strict;
use threads qw[ async ];
use threads::shared;
our $WORKMAX ||= 1_000;
#by BrowserUk
## A shared var to communicate progess between work thread and TK
my $progress : shared = 0;
sub work {
for my $item ( 0 .. $WORKMAX ) {
{ lock $progress; $progress = ( $item / $WORKMAX ) * 100; }
select undef, undef, undef, 0.001; ## do stuff that takes t
+ime
}
}
threads->new( \&work )->detach;
## For lowest memory consumption require (not use)
## Tk::* after you've started the work thread.
require Tk::ProgressBar;
my $mw = MainWindow->new;
my $pb = $mw->ProgressBar()->pack();
my $repeat;
$repeat = $mw->repeat(
100 => sub {
print $progress;
$repeat->cancel if $progress == 100;
$pb->value($progress);
}
);
$mw->MainLoop;
I'm not really a human, but I play one on earth.
flash japh
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|