作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用 open() [O_RDWR | O_NONBLOCK]
、write()
、select()
、read()
和 close()
使用设备文件。也可以调用 ioctl()
来取消当前操作。在任何给定时间,只有一个用户可以使用设备。
我需要想出具有 libsigc++ 信号的 C++ 类,当数据从设备可用时会被触发。
问题:当调用 select()
时,应用程序在等待数据时变得无响应。如何使其响应 - 通过在工作线程中调用 select()
?如果是这样 - 工作线程将如何与主线程通信?也许我应该研究一下 boost::asio
?
最佳答案
How to make it responsive - by calling select() in worker thread
你可以使用dup() ,这将复制您的文件描述符...因此您可以将整个读取操作移至另一个线程。因此,即使读取 [select()] 线程处于休眠状态,您的写入线程和处理线程也会响应。
libsigc++ 的信号发射开销很小,因此我认为您可以在读取线程本身中嵌入代码。插槽可以存在于不同的线程中,这是您接收信号的地方...
我认为Thrift源代码 [完全基于 boost] 可能会引起您的兴趣,尽管 thrift 不使用 libsigc++。
关于c++ - Linux:应用程序响应和 select(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768382/
我是一名优秀的程序员,十分优秀!