当前位置:编程学习 > wap >>

qt多线程

谁知道qt多线程中子线程的生命周期啊,是不是run运行完毕之后这个子线程就结束了,不能再调用start了呢? --------------------编程问答-------------------- 自己先顶顶…… --------------------编程问答-------------------- 子线程是你主进程里new出来的,run函数跑完了必然是还在的 --------------------编程问答--------------------
引用 2 楼  的回复:
子线程是你主进程里new出来的,run函数跑完了必然是还在的

网上都说start只能调用一次,第二次会出现异常,我测试没出现这种现象……而且即使不是new出来的,也是这种现象啊? --------------------编程问答-------------------- 可以再次调用start  --------------------编程问答-------------------- Qt 可以多次调用 start,但是 Java 不行。 --------------------编程问答--------------------
引用 3 楼  的回复:
引用 2 楼  的回复:

子线程是你主进程里new出来的,run函数跑完了必然是还在的

网上都说start只能调用一次,第二次会出现异常,我测试没出现这种现象……而且即使不是new出来的,也是这种现象啊?


不要全信网上说的,记录、转载难免断章取义。 --------------------编程问答--------------------
引用楼主  的回复:
谁知道qt多线程中子线程的生命周期啊,是不是run运行完毕之后这个子线程就结束了,不能再调用start了呢?

QThread是用来控制一个线程的,而不是线程自身。当run函数结束之后,这个线程就会被终结,但创建的QThread对象仍然存在。 --------------------编程问答-------------------- 要看run里面有没有exec(),若没有,run运行完就终结了,如果有的话,run不会运行完,要外部调用quit或者exit去终结,但是线程对象还是存在的,因此还能调用start --------------------编程问答-------------------- 那如果当run函数没有运行完得的时候,再次调用本类的start函数,会把上一次的run函数中断吗?还是会出现其他的效果? --------------------编程问答-------------------- 同意
引用 7 楼  的回复:
引用楼主  的回复:
谁知道qt多线程中子线程的生命周期啊,是不是run运行完毕之后这个子线程就结束了,不能再调用start了呢?

QThread是用来控制一个线程的,而不是线程自身。当run函数结束之后,这个线程就会被终结,但创建的QThread对象仍然存在。
--------------------编程问答-------------------- 谢谢各位了,我是想做一个线程池,担心一开始new的N的线程只能提供N次服务,随着服务的进行,可用线程是否会减少,是否需要新建一个线程池维护线程来维护该线程池。不过最终实现证明我的担心是多余的,线程新建之后可以循环反复利用,谢谢各位啦,我记自己觉的
引用 7 楼  的回复:
引用楼主 的回复:
谁知道qt多线程中子线程的生命周期啊,是不是run运行完毕之后这个子线程就结束了,不能再调用start了呢?

QThread是用来控制一个线程的,而不是线程自身。当run函数结束之后,这个线程就会被终结,但创建的QThread对象仍然存在。

可能是由于这个原因吧,应该是该线程还存在,重新提供服务是可以的…… --------------------编程问答--------------------
引用 8 楼  的回复:
要看run里面有没有exec(),若没有,run运行完就终结了,如果有的话,run不会运行完,要外部调用quit或者exit去终结,但是线程对象还是存在的,因此还能调用start

我在run()里没有调用过exec(),但是run()运行完之后还是可以继续start()的,不知道你自己是否亲身试验过,你说的应该不对吧? --------------------编程问答-------------------- 如果子线程无限循环,怎么在主线程结束子线程,我用了quit()并不好用,该怎么办呢 --------------------编程问答-------------------- 我记得在哪里看到过:start() 会自动再创建第二个线程出来的。 --------------------编程问答--------------------
引用 7 楼 zhu_xz 的回复:
引用楼主  的回复:谁知道qt多线程中子线程的生命周期啊,是不是run运行完毕之后这个子线程就结束了,不能再调用start了呢?
QThread是用来控制一个线程的,而不是线程自身。当run函数结束之后,这个线程就会被终结,但创建的QThread对象仍然存在。

7楼是对的。QThread只是new出来的一个对象,当调用start之后,它会新建一个线程,只会把run()中的代码放到线程中运行,当运行完成后,线程会结束,但QThread对象还在,所以还是可以再次调用start的。 --------------------编程问答-------------------- 如何停下线程,Qt书上使用一个stop变量,让线程检测变量,自己停下。
至于重新start,需要先检测线程是否结束。 --------------------编程问答-------------------- 为什么我的整个程序中没有调用start函数,程序还是正常执行?是主线程exec时,自动会调用子线程的start函数吗?也就是 父线程的执行会自动调用子线程的start函数引发子线程的执行吗? --------------------编程问答--------------------
引用 17 楼 zhengtingyin 的回复:
为什么我的整个程序中没有调用start函数,程序还是正常执行?是主线程exec时,自动会调用子线程的start函数吗?也就是 父线程的执行会自动调用子线程的start函数引发子线程的执行吗?


没有调用start函数,就在主线程里运行,线程并没有打开! --------------------编程问答-------------------- 可以再次调用start()吧。子线程运行完资源就应该被回收了 --------------------编程问答--------------------
引用 9 楼 kuaikuai3698 的回复:
那如果当run函数没有运行完得的时候,再次调用本类的start函数,会把上一次的run函数中断吗?还是会出现其他的效果?



这个不会,
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,