C++创建线程

简介c++在运行一个可执行程序的时候(创建了一个进程),会自动的创建一个主线程,这个主线程和进程同生共死,主线程结束,进程也就结束了。 #include "pch.h" #include <iostream> #include <thread> void print1() { cout << "print1_1线程执行" << endl; cout << "print1_2线程执行" << endl;

c++在运行一个可执行程序的时候(创建了一个进程),会自动的创建一个主线程,这个主线程和进程同生共死,主线程结束,进程也就结束了。

#include "pch.h"
#include <iostream>
#include <thread>
void print1()
{
    cout << "print1_1线程执行" << endl;
    cout << "print1_2线程执行" << endl;
    cout << "print1_3线程执行" << endl;
}
using namespace std;
int main()
{
    thread mythread1(print1);
    mythread1.join();
    //mythread1.detach();
    cout << "主线程执行" << endl;
    return 0;
}
  • thread mythread1(print1)创建一个线程mythread1,print1()是该线程的初始函数(执行函数)。
  • mythread1.join();阻塞主线程,等待mythread1这个线程执行完毕在继续执行,推荐这种做法。
  • mythread1.detach();分离,使主线程和线程mythread1分离,主线程可以先执行结束,如果主线程执行完了,子线程会在c++后台运行,一旦使用detach(),与这个子线程关联的对象会失去对这个主线程的关联,此时这个子线程会驻留在c++后台运行,当主线程执行完毕结束,子线程会移交给c++运行时库管理,这个运行时库会清理与这个线程相关的资源(守护线程),detach()会是子线程失去进程的控制,所以建议不要使用detach(),建议使用jion()。
本文转自:https://www.cnblogs.com/suchang/p/10568998.html
新加评论 评论标题:

文章评论

    _beginthreadex()创建线程

        2019-11-21    
    修改 删除
    要求函数签名是unsigned   int   (__stdcall   *)(void   *)

    所以你的回调用函数应为
    unsigned   __stdcall   thread(void* arg) 

        int   i; 
        ARG * pa=(ARG*)arg;
        for(i=0;i <pa->k;i++) 
            _tprintf(TEXT( "%s "),TEXT( "_____come   into   thread___________\n ")); 
        
        _getche(); 
        _endthread(); 
        return   0; 


    c-将参数传递给_beginthreadex:http://www.cocoachina.com/cms/wap.php?action=article&id=80740

    线程函数的签名中,您得到的错误指出了这一点.首先,它必须是__stdcall函数,其次它必须返回一个无符号的int.您的函数是__cdecl并返回void.

    unsigned __stdcall MyThread(void *data)
    {
        std::cout << "Hello World!"; 
        return 0;
    }



    关于多个参数传递的问题,可以自定义一个结构类型,把要传递的参数包含进去,这样就可以实现多参数传递了。



    线程函数 作为静态函数,非静态成员函数实际还有一个指向类对象的指针,所以是不行的    ?!


评论列表
_beginthreadex()创建线程