有没有不调用 QApplication::exec() 来使用 Qt 的安全方法?
我有许多不同的对象在多个资源上执行长期进程(其中至少一个正在与 Web 应用程序服务器通信)。我正在制作一个 GUI 应用程序,提示用户在正确的时间输入这些不同的进程。我想将我的“流程”逻辑——决定下一步做什么的逻辑——放在一个地方,而不是像对话框类这样的 GUI 对象中。我在想我可以做这样的事情:
...
wait_dialog dlg;
dlg.setModal( false );
dlg.show(); // Should return...
netobject.start_long_lived_process_that_happens_on_other_thread( &completion_callback );
while ( !completion_callback_called() )
{
qApp->processEvents();
netobject.pump_callbacks();
magically_avoid_busywait_while_still_servicing_qt_somehow();
}
dlg.hide();
...
从 Qt 的角度来看,这安全吗?有没有“好”的实施方式magically_avoid_busywait_while_still_servicing_qt_somehow()
?
我在这里想要完成的是尽可能以最明确的方式编写我们的处理流程。我想要一个执行此操作的函数:
show_a_non_modal_wait_dialog()
start_some_processing_1()
wait_for_processing_1_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if ( cancelled ) return
show_a_non_modal_wait_dialog()
start_some_processing_2()
wait_for_processing_2_to_finish()
dismiss_non_modal_wait_dialog()
show_modal_input_dialog()
if ( cancelled ) return
...
我真正想要避免的是开始并等待 Qt 小部件和窗口内的处理。此外,处理对象本身完全独立于 Qt。我想我想要做的是在单个函数中创建一个控制器,其中包含一些帮助回调和状态变量。