假设我有一个类似这样的话题:
void my_thread(char *device_name) {
int fd = open(device_name, O_RDONLY);
struct input_event ev;
while(1) {
read(fd, &ev, sizeof(struct input_event));
/* do something */
}
}
如何停止这样的线程?一种方法是使用pthread_cancel
,但我宁愿更优雅地做。或许像pthread_kill
这样的东西?但是,在这种情况下,read方法是否会阻塞(正如我所假设的那样)以及线程如何处理信号?或者是应该处理它的过程?
我非常感谢你的建议!
答案 0 :(得分:5)
答案是不做任何会在没有超时的情况下阻止的事情。对于IO,在知道调用不会阻塞之前,不应调用read()。例如,首先在路径上使用poll()或select()以确定状态。
答案 1 :(得分:4)
你的问题实际上是“如何中断来自其他线程的阻塞系统调用”。
尝试搜索它。以下是其中一个类似的讨论:Proper way to close a blocking UDP socket
答案 2 :(得分:0)
你不能优雅地杀死一个线程。如果要干净退出,请确保线程根据某些条件退出。