Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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:用户输入阻止线程终止_Multithreading_Perl_Signals - Fatal编程技术网

Multithreading perl:用户输入阻止线程终止

Multithreading perl:用户输入阻止线程终止,multithreading,perl,signals,Multithreading,Perl,Signals,我已经做了一个程序,它可以以两种方式终止,要么用户输入一个字符串说“kill”,要么一个特定的线程信号SIGINT 在这个终结者线程中,我有一个语句(捕捉“kill”): 但是在自动终止的情况下(即SIGINT是从其他线程发送的),打印stmt直到我按下某个键才出现,无论我等待多长时间。我想是阻塞了 有人能告诉我如何在自动终止的情况下提供某种输入,以便立即看到结果吗 谢谢。你不能做你想做的事,你想做的方式。若正在读取文件,并且“挂起输入”,则进程将进入不间断等待状态。在这一点上,您基本上不能通过

我已经做了一个程序,它可以以两种方式终止,要么用户输入一个字符串说“kill”,要么一个特定的线程信号SIGINT

在这个终结者线程中,我有一个语句(捕捉“kill”):

但是在自动终止的情况下(即SIGINT是从其他线程发送的),打印stmt直到我按下某个键才出现,无论我等待多长时间。我想是阻塞了

有人能告诉我如何在自动终止的情况下提供某种输入,以便立即看到结果吗


谢谢。

你不能做你想做的事,你想做的方式。若正在读取文件,并且“挂起输入”,则进程将进入不间断等待状态。在这一点上,您基本上不能通过信号中断它。不间断的等待是一个核心问题,关键是防止文件损坏

要想做您想做的事情,您可能需要使用类似和的
can_read
功能。您可以在轮询循环中测试哪些文件句柄已准备好进行IO—此轮询循环可被kill信号中断


或者,您可以不使用文件句柄读取,而是在调用线程控制操作系统的过程中,使用文件句柄以非阻塞方式捕获按键。所以,是的,它会一直阻塞直到eof。如果你想闯入,你需要的不是line-i/o。
    $a = <>;
print "signal received\n";
threads->exit();