zoukankan      html  css  js  c++  java
  • 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; 
    }
    
    
    
  • 相关阅读:
    Redis源码解析(十五)--- aof-append only file解析
    Redis源码解析(十五)--- aof-append only file解析
    Redis源码解析(十五)--- aof-append only file解析
    Storm的起源概况
    Storm的起源概况
    Storm的起源概况
    Storm的基本知识
    Storm的基本知识
    Storm的基本知识
    Redis源码解析(十六)--- config配置文件
  • 原文地址:https://www.cnblogs.com/July7th/p/6240828.html
Copyright © 2011-2022 走看看