我正在尝试创建一个程序,它将有一个正在等待输入的主线程,以及其他一些线程。当用户输入freeze i
时,线程号i
应该立即暂停-冻结。然后,当用户输入continue i
,线程i
将继续它正在做的事情。每个线程(但主要线程)的任务是每隔x秒打印一条消息。在
程序最终应该用python编写,但是一个C解决方案,一个伪代码,甚至一些想法都会有很大帮助!在
对我来说,在POSIX操作系统中做这件事非常简单:每个线程(但主线程)都将为SIGALRM
、SIGUSR1
和{alarm(x)
和while (1): pause()
。SIGALRM
处理程序将打印消息并设置alarm(x)
。SIGUSR1
处理程序将通过设置remaining_time = alarm(0)
和pause()
来暂停线程。SIGUSR2
处理程序将通过设置alarm(remaining_time)
继续该线程。主线程在接收输入freeze i
时发送SIGUSR1
,接收{SIGUSR2
。在
但我在windows中找不到这样做的方法。请帮我找到正确的方法!据我所知,它应该与使用POSIX的方式完全不同,但是我找不到合适的解决方案。在
选项1(推荐)
在Windows中,您只需要调用SuspendThread来暂停线程。ResumeThread 把它唤醒。没有比这更容易的了。
在
选项2
我理解得很正确,您的UNIX代码的警报/信号解决方案本质上是让每个线程在收到主线程的通知后“自挂起”。在
不要使用alarm()、pause()、signal()-同时使用SleepEx和QueueUserAPC。异步过程调用与UNIX中的信号并不完全相同,但它是一种非常等效的方法,与您现在的实现大致匹配。在
在
选项3
另一种解决方案是只需要与每个线程关联一个关键节锁。线程实现如下所示:
“freeze”和“continue”的实现是调用EnterCriticalSection()——从而阻止线程继续。在
相关问题 更多 >
编程相关推荐