我想放置一個停止按鈕來停止除主線程以外的所有線程。爲了做到這碼像初級講座已被寫入:如何從另一個線程停止正在運行的線程?
serialclass *obje = new serialclass();
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QThread *thread = new QThread();
obje->moveToThread(thread);
connect(this,SIGNAL(signal_stop()),obje,SLOT(stop_thread()),Qt::UniqueConnection);
thread->start();
}
void MainWindow::on_pushButton_baslat_clicked() //başlat butonu
{
connect(this,SIGNAL(signal()),obje,SLOT(function1()), Qt::UniqueConnection);
emit signal();
}
void MainWindow::on_pushButton_stop_clicked()
{
qDebug()<<QThread::currentThreadId()<<"=current thread(main thread)";
emit signal_stop();
}
在SerialClass部分:
void serialclass::function1()
{
int i;
for(i=0;i<99999;i++)
{
qDebug()<<i;
}
}
void serialclass::stop_thread()
{
qDebug()<<QThread::currentThreadId()<<"Serial thread";
QThread::currentThread()->exit();
}
現在,當我按下開始按鈕寄託都工作好。不過,當我按下啓動按鈕和我在function1運行時按下停止按鈕,程序崩潰。
如果我使用睡眠功能而不是退出,首先function1結束,然後睡眠功能啓動。
當他們工作時,我必須做些什麼來阻止子線程。我的意思是我不想等待他們的過程。只想停止
你有'processEvents'調用,或者你在'function1'中使用本地事件循環嗎? – thuga
我編輯了function1。讓我們說這樣的話。在99999顯示之後,stop_threads調用了 –
其實我不知道eventprocess或event loop是什麼。 –