如何多线程按下按钮?
How to multithread a button press?
我有一个需要几秒钟的操作阻塞了我的主线程,这冻结了我的 UI。所以,我需要把操作放在一个单独的线程上。
下面模仿了我正在尝试做的事情,但显然不起作用,因为 join()
阻塞直到线程完成。
在按钮按下线程进行操作时允许主线程继续处理 UI 事件的正确方法是什么? (C++17, Windows 10, WxWidgets)
void OnButtonPress()
{
std::thread t1 = std::thread( []
{
std::this_thread::sleep_for( std::chrono::milliseconds(5000) );
} );
t1.join();
}
从 GUI 应用程序使用线程的最简单方法是启动线程并立即 return 进入主循环,然后 post 在线程即将终止时触发事件。此事件的处理程序可以加入线程,如果应用程序在线程有时间终止之前关闭,您还需要记住在关闭时执行此操作。
通常最好始终保留一个(或多个)后台工作线程 运行,而不是在按下按钮时启动它并使用消息与其通信(wxMessageQueue 是简单的 class 这对这个很有用)告诉它应该做什么。
我有一个需要几秒钟的操作阻塞了我的主线程,这冻结了我的 UI。所以,我需要把操作放在一个单独的线程上。
下面模仿了我正在尝试做的事情,但显然不起作用,因为 join()
阻塞直到线程完成。
在按钮按下线程进行操作时允许主线程继续处理 UI 事件的正确方法是什么? (C++17, Windows 10, WxWidgets)
void OnButtonPress()
{
std::thread t1 = std::thread( []
{
std::this_thread::sleep_for( std::chrono::milliseconds(5000) );
} );
t1.join();
}
从 GUI 应用程序使用线程的最简单方法是启动线程并立即 return 进入主循环,然后 post 在线程即将终止时触发事件。此事件的处理程序可以加入线程,如果应用程序在线程有时间终止之前关闭,您还需要记住在关闭时执行此操作。
通常最好始终保留一个(或多个)后台工作线程 运行,而不是在按下按钮时启动它并使用消息与其通信(wxMessageQueue 是简单的 class 这对这个很有用)告诉它应该做什么。