如题。我使用新开启的一个线程进行耗时代码,用信号和槽连接
GUI线程和工作线程。
在主
界面的构造函数中启动工作线程并连接信号和槽:
workThread = new QThread();
worker = new Updater();
worker->setUI(ui);
worker->moveToThread(workThread);
workThread->start();
connect(this,SIGNAL(startUpdate(char*, char*)),worker,SLOT(startUpdate(char*, char*)));
connect(worker,SIGNAL(finishUpdate(long)),this,SLOT(finishUpdate(long)));
在点击
按钮后发射startUpdate信号:
void MainWindow::on_update_pushButton_clicked()
{
……
out<<"leaving GUI thread"<< "\r\n";
//这一句打印出来了 logfile.close();
emit startUpdate(fileName, password);
}
对应的槽:
void Updater::startUpdate(char* fileName, char *password)
{
isWorking = true;
QFile logfile("log.txt");
if (!logfile.open(QIODevice::Append))
return;
QTextStream out(&logfile);
out<<"into work thread" << "\r\n";
//这句没有打印出来 long ret = UpdateUniKey(fileName, password);
……
}
该代码在本机上
执行没有
问题。在另一台机器上运行时,程序偶尔会崩溃。崩溃时,发射信号之前的那句信息打印出来了,但是槽函数里的没有打印出来。而这个崩溃出现的毫无规律,所以没办法调试。
有人知道这个崩溃是怎么回事吗?谢谢!
[ 此帖被米尔利安在2011-05-09 18:01重新编辑 ]