• C++多线程1


    一个多线程的实例
    #include "stdafx.h"
    #include <windows.h>
    DWORD __stdcall Func(LPVOID pm)
    {
        printf_s("this is a thread , id = %d 
    " , GetCurrentThreadId());
        return 0;
    }
    int main()
    {
        HANDLE h = CreateThread(NULL, 0, Func, NULL, 0, NULL);
        WaitForSingleObject(h, INFINITE);
    
        system("pause");
        return 0;
    }

    运行结果如下

    CreateThread 函数原形

    HANDLE WINAPI CreateThread(

      LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程内核对象的安全属性,NULL为默认设置

      SIZE_T dwStackSize,//线程栈空间大小。0表示使用默认大小(1MB)

      LPTHREAD_START_ROUTINE lpStartAddress,//线程函数地址

      LPVOID lpParameter,//线程函数的参数

      DWORD dwCreationFlags,//额外的标志来控制线程的创建,0表示立即执行

      LPDWORD lpThreadId//线程的id号,NULL表示不需要返回  

    );

    函数返回线程的句柄

    WaitForSingleObject 函数原形

    DWORD WINAPI WaitForSingleObject(

      HANDLE hHandle,  //内核对象句柄

      DWORD dwMilliseconds //最长等待的时间,以毫秒为单位,如1000就表示1秒,传入0就立即返回,传入INFINITE表示无限等待。

    );

    WaitForSingleObject可以等待一个内核对象的触发,因为线程在运行的时候是未触发的,线程结束,线程对象处于触发状态,所以可以用

    WaitForSingleObject(h, INFINITE);
    

    等待一个线程执行完毕,

    函数返回,

    WAIT_OBJECT_0 对象在等待时间内触发

    WAIT_TIMEOUT 对象在等待时间内未触发

    WAIT_FAILED 参数错误

    可以用下面的代码来判断一个线程是否正在运行状态

    bool IsRuning()
    {
        //运行检测
        if (m_hThreadHandle==NULL) return false;
        if (WaitForSingleObject(m_hThreadHandle,0)!=WAIT_TIMEOUT) return false; //传0表示立即返回,WAIT_TIMEOUT表示对象未触发,也就是线程未停止
        return true; 
    }
    
    
    
  • 相关阅读:
    lambda表达式
    You can't specify target table 't_mail_marketing' for update in FROM clause
    从对象list中获取对象属性list
    枚举缓存
    Solr语法
    通过Telnet查询注册服务
    日志查询
    Maven 屏蔽静态文件
    抽奖
    随机码生成方法
  • 原文地址:https://www.cnblogs.com/July7th/p/6240828.html
Copyright © 2020-2023  润新知