C++ 被Qt'所迷惑;s事件循环系统?
文件说Qt的事件循环是FIFO。 但我对文档有点困惑,因此如果: 我有两个按钮,第一个可以:C++ 被Qt'所迷惑;s事件循环系统?,c++,qt,C++,Qt,文件说Qt的事件循环是FIFO。 但我对文档有点困惑,因此如果: 我有两个按钮,第一个可以: on_click_button_one(){ list.append(new_element); } on_click_button_two(){ while(!list.empty()){ list.remove_top(); } } 第二个可以: on_click_button_one(){ list.append(new_element); } on_clic
on_click_button_one(){
list.append(new_element);
}
on_click_button_two(){
while(!list.empty()){
list.remove_top();
}
}
第二个可以:
on_click_button_one(){
list.append(new_element);
}
on_click_button_two(){
while(!list.empty()){
list.remove_top();
}
}
由于列表可能非常大,因此清除列表需要一些时间。但如果我在清算过程中点击按钮一,会发生什么?
两个点击按钮功能在同一个线程中。什么都没有,因为您的
GUI
不会与用户交互,因为您的所有主线程都会删除列表,如果它需要5
秒,那么5
秒您的GUI
将被冻结
如果要在每次迭代时调用processEvents()
以解除GUI冻结,则应禁用第一个按钮或使用QProgressDialog
显示操作进度
主线程中的AFAIK函数和另一线程中的函数可以同时执行(并行),但同一线程中的两个函数不能同时执行。如果您不使用类似于
std::thread
、QtConcurrent
或QThread
的东西,那么我认为您可以确定这两个插槽位于一个线程中,并且永远不会同时执行。但是如果这两个插槽位于另一个线程中,不是主线程?主线程中的@Nyaruko AFAIK函数和另一个线程中的函数可以同时执行(并行),但同一线程中的两个函数不能同时执行。如果您不使用std::thread QtConCurrent或QThread之类的东西,那么我认为您可以确保这两个插槽位于一个线程中,并且永远不会同时执行。