C++等待用户输入的中断线程
C++ interrupt thread waiting for user-input
我有一个问题,我需要中断并等待输入。知道怎么做吗?
bool run;
void partReceive() {
while(run) {
...
int rect_len = (int) recvfrom(servSockFD, buffer,
MAX_MESSAGE_LEN, 0, (struct sockaddr*) &newAddr, &slen);
...
}
}
void partCount() {
int i = 0;
while(run) {
i++;
if (i >= 5) {
run = false;
}
}
}
int main() {
run = true;
thread receive(partReceive);
thread count(partCount);
count.join();
receive.join();
return 0;
}
这是行不通的,因为partReceive()将一直保持,直到它从socket接收到输入。
除了现有的答案之外,请注意,一个有用的设计模式是使用管道(或者更准确地说,套接字对()),其中主线程拥有一端,"选择线程"拥有另一端。然后,要停止"选择线程",您可以在管道上发送一个字符(假设已添加描述符以选择 )。这将唤醒应终止的线程(线程在选择中休眠,直到套接字或控制管道上出现问题)。
正如 recvfrom 的手册页中所建议的:
您需要将接收方更改为第一次调用select
(请参阅手册页)以检查是否有要读取的内容。如果有什么要读的,你可以recvfrom
知道它现在不会阻塞。 如果不读取任何内容,select
也可以超时。在这种情况下,您至少可以检查是否应结束接收器线程。
相关文章:
- 使用 shared_ptr 在中断时结束多线程循环
- 如何使用 SIGINT 在第二个线程中断 getchar
- 可中断线程类 C++11 - 遇到错误?
- 指向成员对象的指针 - 中断线程
- 处理中断时,如何回到主gui线程
- 在 Visual Studio 中的调试中断时设置默认线程,C++
- 返回可中断线程的函数
- 多线程应用程序中的零MQ处理中断
- C++等待用户输入的中断线程
- 如何中断Asynch线程
- 捕获升压线程中断和退出线程的正确方法
- 中断已处于条件变量等待调用中的提升线程
- 中断正在执行MKL或其他第三方函数的线程
- 为什么我不能中断这个特定的提升::线程?
- 《C++并发在行动》中的可中断线程示例
- 使用 Boost::thread 实现可中断线程
- 可以优化中断线程安全
- Windows API中的不可中断线程部分
- 在一定时间后中断线程,在等待时不阻塞
- 为什么此代码被认为是可重复的,以及当操作系统中断线程时究竟会发生什么