我有一个 Qt GUI 应用程序,它在按下按钮时执行一些 I/O 绑定工作。为了避免 GUI 没有响应,我创建了一个新线程并将工作移到那里:
private slots:
inline void on_process_button_clicked() const
{
std::thread thread(&My_class::on_process_button_clicked_real_work, this);
thread.detach();
}
我立即拆线。另一个函数只是做真正的工作:
void on_process_button_clicked_real_work() const
{
std::lock_guard<std::mutex> lock(mutex);
// Some irrelevant code ...
}
GUI 现在并没有完全冻结,我仍然可以看到它更新,但它变得非常无响应和滞后。
问题:
1. 为什么会发生这种情况?
2. 我该如何解决?