QTimer with asio::io_service.poll_one() or poll()
QTimer with asio::io_service.poll_one() or poll()
我在Qt
快速应用程序中使用asio
(仅独立标题)。
作为QT和ASIO具有自己的事件循环,如果我正确理解,我使用QTimer
信号来调用容纳我的asio::io_service
对象的类。
QTimer *timer_io = new QTimer();
QObject::connect(timer_io, SIGNAL(timeout()), &my_INandOUT, SLOT(poll_ios()));
timer_io->start(IO_TIMER);
我将io_timer设置为100 ms。我已经在文档中读到,每个poll()
之后必须调用asio::io_service.reset()
。因此,插槽poll_ios()
具有以下代码:
void INandOUT::poll_ios()
{
// qDebug() << "poll_io signal";
m_io_service.poll_one();
m_io_service.reset();
}
这是调用reset()
的正确方法吗?还是完成任务后我应该在每个处理程序中称其为?它是安全的还是我可以失去asio
事件?
丢失asio
事件并使用Qt
内置类要简单,更容易。
但是,从计时器调用poll_one
或poll
(如您所做的那样)是将asio
与外部事件循环一起使用的正常方法。
,但我不建议在致电poll_one
后打电话重置,因为根据文档,它只能称为:
当这些功能的先前调用返回时 io_service被停止或用完工作
如果您可以重新启用ASIO处理程序(例如,在接收消息后启用接收处理程序),则io_service
总是有工作要做。在这种情况下,最好只致电poll
而不是poll_one
,然后丢失reset
的呼叫,例如:
void INandOUT::poll_ios()
{
// qDebug() << "poll io signal";
m_io_service.poll();
}
相关文章:
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- DLL Made with CMake 使程序崩溃
- 将继承的结构传递给 poll()
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- specialized std::default_delete with QQmlComponent
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- Inference pytorch C++ with alexnet and cv::imread image
- QTimer with asio::io_service.poll_one() or poll()