QT,在A线程中循环创造N个B线程,经测试,这N个B线程执行完毕之后不会发送finished信号,程序也不会析构它们,何解
QT,在A线程中循环创建N个B线程,经测试,这N个B线程执行完毕之后不会发送finished信号,程序也不会析构它们,何解?
QT,在A线程中循环创建N个B线程,经测试
这N个B线程执行完毕之后不会发送finished信号,程序也不会析构它们,何解?
下面用伪代码表示吧,代码可能不对,但我做的程序是想这样来实现的
先构建两个线程
我想实现的功能是:
A线程的run函数中不断new出来B线程对像
while(true){
BThread=new B;
BThread->start();
connect(BThread,SIGNAL(finished()),BThread,SLOT(deletelater()));
}
当B线程对像执行完之后,会自动析构
但是我这种做法,它是不会自动析构的
-----------------------------------------
另外我尝试在A线程中创建QVector<B> *BVector
然后将A中创建的B线程对像放到BVector中,然后再forech这些对像,发现它们都在运行,没有结束
强制delete会告诉我这些对像在运行,BVector->item-isfinished() 发现它还在运行
也就是在A中创建的B线程对像执行start(),run()函数中的内容运行完之后,它不退出
————————————————————————————————————————
已经Google/百度搜索多次,没有发现我想实现的这种样例和解决方法
请高手帮我改一下,改成它能够自动析构,
并且我可以随意创建N个B线程对像并执行
希望各位大大,建一个这样的工程,然后测试一下,给一份可行的代码给我
非常感谢!
------解决方案--------------------
不妨抽时间把我前面贴的blog看看,把例子都跑一遍,对你理解QThread会有好处。另外,你也需要恶补一些事件循环的知识。具体到deleteLater,你也可以看看这篇blog: http://blog.****.net/dbzhang800/article/details/6300025
----------------------------------
言归正传,
这儿举得while例子,是说的你的B线程的情况,而不是说A线程。注意:exec() 就是while循环!
其他我就不重复了,你疑惑的这些(事件循环和QThread的工作机制)都属于Qt比较底层比较基础的东西,一旦你掌握了,你会发现问题很简单,用不着乱试。
QT,在A线程中循环创建N个B线程,经测试
这N个B线程执行完毕之后不会发送finished信号,程序也不会析构它们,何解?
下面用伪代码表示吧,代码可能不对,但我做的程序是想这样来实现的
先构建两个线程
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();
}
我想实现的功能是:
A线程的run函数中不断new出来B线程对像
while(true){
BThread=new B;
BThread->start();
connect(BThread,SIGNAL(finished()),BThread,SLOT(deletelater()));
}
当B线程对像执行完之后,会自动析构
但是我这种做法,它是不会自动析构的
-----------------------------------------
另外我尝试在A线程中创建QVector<B> *BVector
然后将A中创建的B线程对像放到BVector中,然后再forech这些对像,发现它们都在运行,没有结束
强制delete会告诉我这些对像在运行,BVector->item-isfinished() 发现它还在运行
也就是在A中创建的B线程对像执行start(),run()函数中的内容运行完之后,它不退出
————————————————————————————————————————
已经Google/百度搜索多次,没有发现我想实现的这种样例和解决方法
请高手帮我改一下,改成它能够自动析构,
并且我可以随意创建N个B线程对像并执行
希望各位大大,建一个这样的工程,然后测试一下,给一份可行的代码给我
非常感谢!
------解决方案--------------------
不妨抽时间把我前面贴的blog看看,把例子都跑一遍,对你理解QThread会有好处。另外,你也需要恶补一些事件循环的知识。具体到deleteLater,你也可以看看这篇blog: http://blog.****.net/dbzhang800/article/details/6300025
----------------------------------
言归正传,
这儿举得while例子,是说的你的B线程的情况,而不是说A线程。注意:exec() 就是while循环!
其他我就不重复了,你疑惑的这些(事件循环和QThread的工作机制)都属于Qt比较底层比较基础的东西,一旦你掌握了,你会发现问题很简单,用不着乱试。