作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此程序中,POE::Wheel::FollowTail可以很好地跟踪文件尾部,它还在单独的线程中运行,以仅监视编译作业的进度。
在InputEvent处理程序中,有一个粗略的正则表达式可提取编译结果,并且一切正常,但是我无法在此子类之外获取任何可访问的结果值。即使我将结果变量放在全局范围内,它们也不会被修改。
该程序由一个运行编译作业的进程,另一个监视日志和等待主循环的进程组成。
全局范围:
my $Pass = 0;
my $Done = 0;
threads->create(\&StartWatcher);
sub StartWatcher
{
my $logfile = "filename.log";
# Create the logfile watcher
POE::Session->create
(
inline_states =>
{
_start => sub
{
$_[HEAP]{tailor} = POE::Wheel::FollowTail->new( Filename => $logfile, InputEvent => "got_log_line", );
},
got_log_line => sub
{
$Pass += () = $_[ARG0] =~ /^\d+.*vcproj \- 0 error\(s\), \d+ warning\(s\)/g;
$Done += () = $_[ARG0] =~ /^\d+.*vcproj \- \d+ error\(s\), \d+ warning\(s\)/g;
print "POE InputEvent Pass: $Pass, Done: $Done\n"; # Debug output
},
}
);
POE::Kernel->run();
}
while('true')
{
$ProcessObj->Wait(100); # milliseconds wait
$ProcessObj->GetExitCode($exitcode);
if ( $exitcode == STILL_ACTIVE )
{
"Compiling... [$Done/$Count] Pass: $Pass Failed: $failed"
if($RunCounter++ % 10 == 0);
next;
}
last;
}
POE InputEvent Pass: 1, Done: 1
Compiling... [0/91] Pass: 0 Failed: 0
最佳答案
Perl中的线程无法以与其他语言相同的方式工作,程序空间不会共享。在线程创建中,当前线程被复制到新线程中,新线程与父线程分离(每个线程都有它自己的perl解释指令)。如果要在线程之间进行通信,请查看thread::shared,Thread::Queue和Thread::Semaphore。
关于multithreading - 在不修改全局变量的线程中运行的Perl POE::Wheel::FollowTail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6437792/
在此程序中,POE::Wheel::FollowTail可以很好地跟踪文件尾部,它还在单独的线程中运行,以仅监视编译作业的进度。 在InputEvent处理程序中,有一个粗略的正则表达式可提取编译结果
我是一名优秀的程序员,十分优秀!