16,239
社区成员
发帖
与我相关
我的任务
分享
A class:public QThread{
public:
A:A(){
//BThread=new B; //将run()函数中的new B移动到这里来,B执行完就会正确析构
}
void run(){
while(true){
BThread=new B;
connect(BThread,SIGNAL(finished()),BThread,SLOT(deletelater()));
BThread->start();
}
}
private:
B *BThread;
}
B class:public QThread{
public:
void run()
{
qDebug()<<currentThreadId();
this->exec(); //写不写都一样
this->quit(); //写不写都一样
}
}
main{
A *a=new A;
a->start();
}
重复发帖没必要,从你这儿的代码看,主要是你还是没意识到你错在哪儿了。首先,你这里面这么用while肯定不行,这要创建多少线程啊?恐怕你的系统承受不了。 其次,你这里面没有启动事件循环,deleteLater() 是不可能被执行的 void run(){ while(true){ BThread=new B; connect(BThread,SIGNAL(finished()),BThread,SLOT(deletelater())); BThread->start(); } }
重复发帖没必要,从你这儿的代码看,主要是你还是没意识到你错在哪儿了。首先,你这里面这么用while肯定不行,这要创建多少线程啊?恐怕你的系统承受不了。 其次,你这里面没有启动事件循环,deleteLater() 是不可能被执行的 void run(){ while(true){ BThread=new B; connect(BThread,SIGNAL(finished()),BThread,SLOT(deletelater())); BThread->start(); } }
void run(){ while(true){ BThread=new B; connect(BThread,SIGNAL(finished()),BThread,SLOT(deletelater())); BThread->start(); } }