我有一个QThread,它从套接字读取并在有任何可用数据时发送信号(QT信号)。 阻塞read(2)会很容易,但是我需要能够从外面停止线程,而不需要等待太长时间。
如果我使用pthread,我会使用pselect和pthread_kill(thread_id, some_signal)
,但QThread不会
似乎有任何类似的方法。并且在这个项目中添加对pthread的依赖似乎并不优雅。
我也不想使用其他丑陋的方法,例如不断尝试从套接字中读取一些相对较小的超时。
编辑:套接字不是TCP,而是蓝牙L2CAP。
答案 0 :(得分:1)
您可以使用QTcpSocket的异步接口,而不是自己处理线程。查看Fortune Client example。
答案 1 :(得分:1)
一个不太优雅,但简单而有效的解决方案: 创建一个管道,然后选择等待管道或我的套接字。通过这种方式,我可以随时通过向管道写入内容来停止等待。
答案 2 :(得分:0)
您可以向QThread的terminate()
位置发送信号。这将根据操作系统调度策略停止您的线程。