如何中断在QThread中运行的select / pselect

时间:2010-09-07 13:40:44

标签: c++ qt sockets pthreads qthread

我有一个QThread,它从套接字读取并在有任何可用数据时发送信号(QT信号)。 阻塞read(2)会很容易,但是我需要能够从外面停止线程,而不需要等待太长时间。

如果我使用pthread,我会使用pselect和pthread_kill(thread_id, some_signal),但QThread不会 似乎有任何类似的方法。并且在这个项目中添加对pthread的依赖似乎并不优雅。

我也不想使用其他丑陋的方法,例如不断尝试从套接字中读取一些相对较小的超时。

编辑:套接字不是TCP,而是蓝牙L2CAP。

3 个答案:

答案 0 :(得分:1)

您可以使用QTcpSocket的异步接口,而不是自己处理线程。查看Fortune Client example

答案 1 :(得分:1)

一个不太优雅,但简单而有效的解决方案: 创建一个管道,然后选择等待管道或我的套接字。通过这种方式,我可以随时通过向管道写入内容来停止等待。

答案 2 :(得分:0)

您可以向QThread的terminate()位置发送信号。这将根据操作系统调度策略停止您的线程。