【发布时间】:2017-11-08 09:24:15
【问题描述】:
我在 C 中使用 _beginthread() 创建了 5 个线程池。池中的所有线程将无限运行以完成从客户端接收的作业。例如,当客户端连接时,池中的空闲线程将处理此问题。完成其任务后,线程将等待下一个客户端。现在我的问题是,每当我从服务器输入ctrl+c 时,程序就会终止。但我想在终止主线程之前关闭池中所有正在运行和等待的线程。
【问题讨论】:
-
C 还是 C++?请选择一种语言。
-
如果您使用 C 编程,请不要添加 C++ 标签。虽然这门语言有共同的祖先并且语法相似,但它们仍然是非常不同的语言。
-
至于你的问题,是关于如何捕捉
CTRL-C,如何很好地告诉线程结束,或者两者结合的问题(在这种情况下你应该发布两个问题)?如果您还没有完成(奇怪,因为您已经成为会员三年多了),那么请花一些时间来read about how to ask good questions。 -
对于这个问题的第一部分,see this question
-
无限运行是什么意思?你有没有使用 while(1) 这样做?或者任何其他控制线程的 API 中的客户端任务句柄?你能分享线程伪代码吗?有 3 种可能的解决方案,1. 您可以在 while(1) 中观察全局变量以触发线程清理,2. 在线程中调用任何阻塞 API 之前,您可以设置线程取消点并可以从信号处理程序发送取消。或 3. 你可以有线程的信号处理程序(不知道窗口,对于 linux refer)
标签: c multithreading winapi