Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 被Qt'所迷惑;s事件循环系统?_C++_Qt - Fatal编程技术网

C++ 被Qt'所迷惑;s事件循环系统?

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

文件说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_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之类的东西,那么我认为您可以确保这两个插槽位于一个线程中,并且永远不会同时执行。