QT中实现C++使用线程操作

自C++11开始后C++有了标准的线程库:std::thread,各种支持C++11及更改版本的IDE都可以使用,便于是使用C++开发多线程库供多平台使用。

话不多说,直接上代码简单明了:

例程1:

 

QT中实现C++使用线程操作_第1张图片

运行后发现线程函数正常运行,但是程序会报错,如下所示:

这是因为创建了线程后线程开始执行,但是主线程main()并没有停止脚步,仍然继续执行然后退出,此时创建的子线程还在运行,线程仍然存在但指向它的线程对象已经销毁,所以会抛出异常。那么怎样才能保证主线程在子线程退出后再退出呢?

QT中实现C++使用线程操作_第2张图片

 

QT中实现C++使用线程操作_第3张图片


运行结果:

本次运行正常没有再出现异常,可从运行结果可以看到“this is Main”这句话是在子线程运行完成后才打印的,这说明thread::join()接口会堵塞主线程。thread::detach()thread::detach()接口也可以解决最开始的异常问题,

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

detach是用来和线程对象分离的,这样线程可以独立地执行,不过这样由于没有thread对象指向该线程而失去了对它的控制,当对象析构时线程会继续在后台执行,但是当主程序退出时并不能保证线程能执行完。如果没有良好的控制机制或者这种后台线程比较重要,最好不用detach而应该使用join。

QT中实现C++使用线程操作_第4张图片


int main(int argc, char *argv[])

{

    std::thread t1(f1);

    std::thread t2(f2);

    t1.detach();

    t2.detach();

    std::cout << "this is Main \n";

    return 0;

}

由结果可见线程并没有执行完而退出:

QT中实现C++使用线程操作_第5张图片

你可能感兴趣的:(C++,c++,多线程,QT)