gpt4 book ai didi

multithreading - Perl 并行运行两个 while 循环子例程

转载 作者:行者123 更新时间:2023-12-03 22:42:58 27 4
gpt4 key购买 nike

我希望并行运行两个子程序,它们都使用 ADB 命令在 android 手机上执行相同的任务。在 SO 和其他研究的帮助下,我在下面生成了以下代码,但是我是多线程的新手,在执行过程中出现“Free to wrong pool”错误。我假设我得到了这个,因为我在两个线程中都使用了 $_ 变量,这是正确的吗?我正在使用 Windows7 来运行它,但是我的 Perl 解释器在运行这个脚本时崩溃了。任何指导将不胜感激。谢谢。

use strict;
use Win32::OLE;
use EFS_Handle;
use HelperFunctions;
use threads;

#### Various ADB command sequences follow ####
#### Start of multithread to run the same function on different android handsets ####

my @jobs;

push @jobs, threads->create(
sub {
print "\n\t" . curTime() . " :\t DUT Time at start of MPLMN search";

open my $fh1, '>', "output.txt" or die "Cannot open output.txt: $!";
my $pid1 = open my $log1, "-|", "adb -s 42d8d7dd logcat";

system('adb -s 42d8d7dd shell input keyevent KEYCODE_ENTER');

while (<$log1>) {
$fh1->print($_);
last if m/Sorted scan results/;
}
kill "TERM", $pid1;
close $log1;
print "\n\t" . curTime() . " :\t DUT Time at End of MPLMN search\n";
}
);

push @jobs, threads->create(
sub {
print "\n\t" . curTime() . " :\t REF Time at start of MPLMN search";

open my $fh, '>', "output.txt" or die "Cannot open output.txt: $!";
my $pid = open my $log, "-|", "adb -s 0123456789ABCDEF logcat";

system('adb -s 0123456789ABCDEF shell input keyevent KEYCODE_ENTER');

while (<$log>) {
$fh->print($_);
last if m/EVENT_NETWORK_SCAN_COMPLETED/;
}
kill "TERM", $pid;
close $log;
print "\n\t" . curTime() . " :\t REF Time at End of MPLMN search\n";

}
);

$_->join for @jobs;

最佳答案

Win32::OLE 众所周知,模块不是线程安全的

如果您删除 use Win32::OLE (您似乎没有使用它)然后您的代码将运行良好

如果对 有疑问亚行与多个同时命令合作,但这是另一回事

关于multithreading - Perl 并行运行两个 while 循环子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20325162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com