我有一个问题,我需要中断并等待输入。知道怎么做吗?
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接收输入..
答案 0 :(得分:2)
除了现有的答案之外,请注意一个有用的设计模式是使用管道(或者更确切地说,是一个socketpair()),其中主线程拥有一端而'select thread'拥有另一端。然后,要停止'选择线程',您可以在管道上发送一个字符(假设已添加描述符以进行选择)。这会唤醒应该终止的线程(线程在select中休眠,直到套接字或控制管道上发生某些事情为止)。
答案 1 :(得分:0)
您需要将接收者更改为先调用select
(请参阅man page)以检查是否有要阅读的内容。如果有什么东西要读,你可以recvfrom
知道它现在不会阻止。如果不读取任何内容,select
也可以超时。在这种情况下,您至少可以检查是否应该结束接收器线程。