gpt4 book ai didi

c++ - Linux:应用程序响应和 select()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:10 26 4
gpt4 key购买 nike

我有一个使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com