码迷,mamicode.com
首页 > 编程语言 > 详细

windows多线程(一) 创建线程 CreateThread

时间:2018-04-09 23:11:40      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:std   sum   调度   ddr   thread   分享图片   主线程   功能   参数   

一 线程创建函数 CreateThread

1. 函数原型:


    HANDLE WINAPI CreateThread(
      _In_opt_  LPSECURITY_ATTRIBUTES  lpThreadAttributes,   
      _In_      SIZE_T                 dwStackSize,
      _In_      LPTHREAD_START_ROUTINE lpStartAddress,
      _In_opt_  LPVOID                 lpParameter,
      _In_      DWORD                  dwCreationFlags,
      _Out_opt_ LPDWORD                lpThreadId
    );

2. 参数说明:

  • 第一个参数 lpThreadAttributes 表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。

  • 第二个参数 dwStackSize 表示线程栈空间大小。传入0表示使用默认大小(1MB)。

  • 第三个参数 lpStartAddress 表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。

  • 第四个参数 lpParameter 是传给线程函数的参数。

  • 第五个参数 dwCreationFlags 指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread()。

  • 第六个参数 lpThreadId 将返回线程的ID号,传入NULL表示不需要返回该线程ID号。

3.返回值

线程创建成功返回新线程的句柄,失败返回NULL

二 实例



/* 创建第一个线程。主进程结束,则撤销线程。 */

#include<Windows.h>
#include<stdio.h>

DWORD WINAPI ThreadFunc(LPVOID);

void main()
{
    HANDLE hThread;
    DWORD  threadId;

    hThread = CreateThread(NULL, 0, ThreadFunc, 0, 0, &threadId); // 创建线程
    printf("我是主线程, pid = %d\n", GetCurrentThreadId());  //输出主线程pid
    Sleep(2000);
}

DWORD WINAPI ThreadFunc(LPVOID p)
{   
    printf("我是子线程, pid = %d\n", GetCurrentThreadId());   //输出子线程pid
    return 0;
}


这个程序功能很简单,主线程创建一个线程,同时主线程和子线程分别向控制台输出线程的PID,如下图:
技术分享图片

windows多线程(一) 创建线程 CreateThread

标签:std   sum   调度   ddr   thread   分享图片   主线程   功能   参数   

原文地址:https://www.cnblogs.com/ay-a/p/8762951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!