我已經使用Visual Studio嚮導創建了一個新的Win32 Windows應用程序。並將Boost.Asio添加到該項目中。我想用deadline_timer每秒做一些重複的工作。雖然計時器(及其線程)運行良好,但我鼓勵UI不更新的問題,因爲io_service.run()阻塞了UI線程。經過快速搜索,我發現this thread。這其實是同樣的問題!所以,我將代碼移到了GetMessage()循環中,並將io_service.run()更改爲io_service.poll_one()。Boost.Asio Win32 Windows應用程序
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
//Windows main loop stuff
if (io.stopped())
io.reset();
io.poll_one();
}
嗯,它的工作,但只有當有Windows消息等待,這是顯而易見的。我還有什麼可以做的嗎?或者我應該使用WinAPI線程而不是boost?
也許試試'PeekMessage'? – ooga
你也可以嘗試'io_service.poll()'而不是'io_service.poll_one()' – kenba
@kenba'io_service.poll()'和'io_service.poll_one()'在我的項目中是相同的,因爲只有一個處理器。 – Hiale