正在终止线程
Terminating thread
我有一个对话框,显示进度条和一些其他数据,并且在这个对话框上还有一个取消按钮。显示此对话框时,可能会进行大量计算,显示在进度条上。这个计算是从这个对话框代码中开始的,所以我有:
Counting_Progress_Dialog::Counting_Progress_Dialog(QWidget *parent) :
QDialog(parent)
{
setupUi(this);
thread_ = new Threaded;//THIS IS THE THREAD IN WHICH COMPUTATION IS BEING PERFORMED
connect(thread_,SIGNAL(counter_value(int)),this,SLOT(update_progress_bar(int)));
connect(this,SIGNAL(rejected()),thread_,SLOT(terminate()),Qt::QueuedConnection);//
HERE I'M CONNECTING REJECTED ON DIALOG TO TERMINATE ON THREAD
}
void Counting_Progress_Dialog::start()
{
thread_->start(QThread::LowestPriority);
}
我确实在程序的一部分调用了这个:
void My_Class::dummy_()
{
auto old_priority = this->thread()->priority();
this->thread()->setPriority(QThread::HighestPriority);
Counting_Progress_Dialog progress;
progress.start();//this will start thread
progress.exec();//this will enter it's event loop
progress.wait();//this will wait until thread is finished
this->thread()->setPriority(QThread::NormalPriority);
}
但是,尽管如此,当我在对话框上按下取消键时,整个应用程序都会冻结。我做错了什么?如何使其行为正确?
更新:
void Counting_Progress_Dialog::wait()
{
thread_->wait();
}
我看到您正在使用两种不同的策略进行连接。但是,如果thread_
和this
(计数对话框)真的在两个分开的线程内,那么连接将始终是Qt::QueuedConnection
。这不是问题所在。
progress.exec();//this will enter it's event loop
调用exec()将暂停dummy_()
的执行,直到对话框必须返回为止。当对话框返回时,线程将终止。所以我看不出的目的
progress.wait();//this will wait until thread is finished
顺便问一下,那是什么功能?我唯一知道的是CCD_ 5。我很有信心问题就在这里。。。
编辑:
progress.wait()不是问题所在。。。但线程发送的事件可能在某种程度上造成了麻烦。使用调试器或一些qDebug()查看在按下cancel后是否调用了update_progress_bar
。
相关文章:
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- pthread_kill() 与 pthread_cancel() 终止因 I/O 而阻塞的线程
- 终止读取时阻止的线程 c++11
- 如何安全地终止线程?(使用指针)C++
- 终止调用本机代码的 .Net 线程
- 当加入 C++11 函数的线程仍未终止时,是否可以返回?
- 自终止线程.使用联接或分离
- 终止处理程序在哪个线程中调用?
- 线程不在 Linux 上终止,但在 Mac 上终止
- 在C 中,可以检测到线程的意外终止
- 从c/c 中终止线程中的线程,而无需线柄
- 必须将 std::thread 加入 std::vector<std::thread> 两次以避免从线程 dtor 终止
- 线程终止
- 提升线程终止程序
- 连接线程(阻塞调用线程直到线程终止)和普通函数调用之间的区别是什么
- 是否有任何 pthread 函数可以在最后一个线程终止时调用某些内容
- 线程终止/退出后正在验证数据结构
- 从另一个线程终止C++中的一个线程
- 将一个线程(卡住的)从另一个线程终止
- 带有等待窗口的C++线程终止