Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在perl中实现js setTimeout功能_Multithreading_Perl_Settimeout - Fatal编程技术网

Multithreading 在perl中实现js setTimeout功能

Multithreading 在perl中实现js setTimeout功能,multithreading,perl,settimeout,Multithreading,Perl,Settimeout,如何在Perl中实现Javascript设置超时功能?这是我试图用Perl编写的javascript代码。这是否可以使用线程 alert("Event 1 occured"); setTimeout(function(){ alert("3 seconds elapsed"); }, 3000); alert("Event 2 occured"); 输出为: Event 1 occured Event 2 occured 3 seconds elapsed 我有perl 5.18.2,

如何在Perl中实现Javascript设置超时功能?这是我试图用Perl编写的javascript代码。这是否可以使用线程

alert("Event 1 occured");
setTimeout(function(){ alert("3 seconds elapsed"); }, 3000);
alert("Event 2 occured");
输出为:

 Event 1 occured
 Event 2 occured
 3 seconds elapsed

我有perl 5.18.2,我在Mac OSX上,不需要线程,而且它们是。您可以像JavaScript一样使用事件循环,Perl核心中没有任何事件循环。两个流行且受良好支持的事件循环生态系统是和(Mojolicious web框架背后的事件循环)。主要区别在于,与JavaScript不同,事件循环只有在有东西启动时才会运行

use strict;
use warnings;
use IO::Async::Loop;
print "Event 1 occurred\n";
my $future = IO::Async::Loop->new->delay_future(after => 3)->on_done(sub { print "3 seconds elapsed\n" });
print "Event 2 occurred\n";
$future->await; # run event loop until Future has been resolved

use strict;
use warnings;
use Mojo::IOLoop;
print "Event 1 occurred\n";
Mojo::IOLoop->timer(3 => sub { print "3 seconds elapsed\n" });
print "Event 2 occurred\n";
Mojo::IOLoop->start; # run event loop until no more events to wait for
有关事件循环和非阻塞代码的高级概述,请查看。

请参阅函数。否则,考虑查看或者,如果你想用JavaScript获取特征奇偶,一个事件循环,像或或./P> 对于线程,您的示例如下:

use strict;
use threads;
print("Event 1 occured\n");
async {
    sleep 3;
    print "3 seconds elapsed\n";
};
print("Event 2 occured\n");
$_->join for threads->list; # to wait until all threads have finished

Re“无论如何在Perl中都不是很好”,不,这个警告仅仅意味着你需要意识到创建线程的工作量很大。这也是错误的信息。1) Perl变量在默认情况下不共享这一事实与此无关。如果有什么区别的话,它使线程比像您这样的事件循环更安全。作为一名程序员,你应该努力减少线程被广泛使用。3) XS模块通常不支持线程的原因与您给出的相反:作者没有努力使其线程安全,这是需要做的,因为默认情况下C变量是共享的。我不希望与您发生政治争论。Perl中的线程可以正确使用这一事实并不妨碍它们成为最大的noob陷阱,我不明白这是怎么可能的。这个警告之所以存在,是因为一些IRC频道上的人们厌倦了回答这个问题。这是毫无意义的,因为备选方案(如您推荐的IO循环)非常复杂且容易出错。OP没有说要同时执行多个IO操作。//是什么让你认为我不能帮助人们解决他们的问题??