(C++) CreateThread

先理解一下函数原型:

HANDLE WINAPI CreateThread(
  _In_opt_  LPSECURITY_ATTRIBUTES  lpThreadAttributes, // 指向SECURITY_ATTRIBUTES结构的指针,用于决定返回的handle是否可以被子进程继承。如果是NULL,则handle不能不继承。
  _In_      SIZE_T                 dwStackSize,        // 栈的初始大小(in bytes),如果这个参数是0,则新的线程使用默认大小。
  _In_      LPTHREAD_START_ROUTINE lpStartAddress,     // 指向线程要执行的函数的指针。这个指针代表线程的起始地址。
  _In_opt_  LPVOID                 lpParameter,        // 指向要传递给线程的参数。
  _In_      DWORD                  dwCreationFlags,    // 控制线程创建的一个标志位。 0 表示线程在创建后立即执行。
  _Out_opt_ LPDWORD                lpThreadId          // 指向收到线程ID的变量的指针,如果这个参数是NULL,那么线程ID没有返回。
);

返回值
如果函数运行成功,则返回一个指向新线程的handle。
如果失败,返回值为NULL,可以用GetLastError 来获取详细的错误信息。

参考:

http://cboard.cprogramming.com/cplusplus-programming/54830-sending-arguments-function-using-createthread.html

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

A pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpThreadAttributes is NULL, the handle cannot be inherited.

时间: 2024-10-05 23:51:12

(C++) CreateThread的相关文章

C++的CreateThread实例

function CreateThread(  lpThreadAttributes: Pointer;           {安全设置}  dwStackSize: DWORD;                    {堆栈大小}  lpStartAddress: TFNThreadStartRoutine; {入口函数}  lpParameter: Pointer;                  {函数参数}  dwCreationFlags: DWORD;               

CreateThread、_beginthread、_beginthreadex比较小结

很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了.等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来创建线程:另外一种就是调用MSVC CRT的函数_beginthread()或_beginthreadex()来创建线程.相应的退出线程也有两个函数Windo

VC++ AfxBeginThread 与 CreateThread 的区别

简言之:AfxBeginThread是MFC的全局函数,是对CreateThread的封装.    CreateThread是Win32 API函数,前者最终要调到后者.具体说来,CreateThread这个 函数是windows提供给用户的 API函数,是SDK的标准形式,在使用的过程中要考虑到进程的同步与互斥的关系,进程间的同步互斥等一系列会导致操作系统死锁的因素,用起来比较繁琐一些,初学的人在用到的时候可能会产生不可预料的错误,建议多使用AfxBeginThread,是编译器对原来的Cre

WinApi多线程(CreateThread,CreateMutex,ReleaseMutex)

注:本文写得十分简略.如感到难以理解,请立即参考另一篇写得比我好得多的文章 我们先看一个示例 1 #include <windows.h> 2 #include <stdio.h> 3 4 DWORD WINAPI reportFunc(LPVOID); // 线程函数的一般原型.可以不返回任何值 5 6 #define CntMsg 100 7 8 int main() 9 { 10 /* 建立一个新线程并令其立即执行,返回这个线程的handle 11 * 第三个参数report

CreateThread函数

函数功能:创建线程 函数原型: HANDLE WINAPI    CreateThread( LPSECURITY_ATTRIBUTES    lpThreadAttributes, SIZE_T    dwStackSize, LPTHREAD_START_ROUTINE    lpStartAddress, LPVOIDlp    Parameter, DWORD    dwCreationFlags, LPDWORD    lpThreadId ); 函数说明: 第一个参数表示线程内核对象

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但是,你应该明白,在每个线程中动态分配和销毁内存块,是需要同步保护的.Delphi语言中有一个在使用多线程环境下至关重要的全局变量IsMultiThread,系统在进行内存分配的时候,根据IsMultiThread变量值判断当前是否使用在多线程环境下,如果该变量为True,哪么,系统在分配和销毁内存的

秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

版权声明:本文为博主原创文章,未经博主允许不得转载. 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex? 使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线程并等待其运行完毕,子线程就输出它的线程ID号然后输出一句经

秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别

本文将带领你与多线程作第一次亲热接触,并深入分析CreateThread与_beginthreadex的本质差别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex究竟有什么差别,在实际的编程中究竟应该使用CreateThread还是_beginthreadex? 使用多线程事实上是很easy的,以下这个程序的主线程会创建了一个子线程并等待其执行完成,子线程就输出它的线程ID号然后输出一句经典名言--Hello World.整个程序的代码很

CreateThread传递多个参数的方法(利用结构体的参数指针)

很多朋友一直都在问CreateThread如何传递多个参数,CreateThread传递参数的方式是指针传递的,所以这里也可以利用指针来做!Demo 关键代码如下: type  TfrmTestThread = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarati

_beginthread 和 CreateThread 区别

/*------------------------------------------------------------------------------------------------- 摘录时间 2017-03-03; _beginthread 和 CreateThread 区别; 程序员对于Windows程序中应该用_beginthread还是CreateThread来创建线程,一直有所争论; 本文将从对CRT源代码出发探讨这个问题; I. 起因; 今天一个朋友问我程序中究竟应该