栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

线程流程 - C++多线程编程(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程流程 - C++多线程编程(二)

主线程从main开始执行,编程过程需要包含头文件。

thread创建与执行

(1)创建myprint子线程并执行

(2) 主线程阻塞到这里等待myprint执行完,当只线程执行完毕,这个join()就开始执行。

int myprint()
{
    printf("Hello world");
}

thread mythread(myprint);                                (1)
mythread.join();                                         (2)

如果主线程执行完毕,但是子线程还没有执行完毕,这种程序是不合格的,写出来程序也是不稳定的。这种情况下会执行报错,主要是因为子线程没有执行完毕读写数据就结束。所以主线程一般情况下包含了基本的环境的整理和收尾工作。

(1.3)detach。传统主线程需要等待主线程执行完毕才能推出,现有的方法中可以通过detach进行分离,主线程不需要和子线程汇合,这并不会影响子线程的执行。存在一种情况,如果存在多个线程的情况下,主线程等待子线程的这种方式不是很合理的,通过detach实现分离。但是实际开发中这种情况用的很少。

(1.4)joinable()返回值可以用于判断是否可以使用join或者detach,如果是true可以使用detach,如果是false使用join。

使用类实现线程

class TA
{
    void operator()()
    {
        printf("Hello World!");
    }
}

int main ()
{
    TA ta;
    thread myjob(ta);
    myjob.join();
}

如果使用一个局部对象,同时使用detach情况线程创建是否成功呢?detach以后会复制对象内容到新的进程,如果对象没有指针或者引用这种方法指出来知道其他局部变量,这个时候创建子线程是成功的。对应的析构函数调用也是复制部分的线程实现的资源释放。

class TA{
public:
    void operator()()
    {
    }
}

int main()
{
    int mai = 7;
    TA ta(mai);
    thread myobj(ta);
    myobj.detach();

    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号