创建线程有两个函数可以使用:
1、_beginthreadex()
2、CreateThread()
说明:
1、前者是Mulit-Threads C Runtime库中的函数,后者是Windows API 库中的函数。
2、前者是对后者的封装。
3、前者使得每个线程都将拥有自己专用的一块内存区域来供标准C运行库中所有有需要的函数使用。
4、如果线程中调用了C Run Time Library 中的函数,那么必须使用前者。即:如果在除主线程之外的任何线程中进行以下操作,你就应该使用多线程版本的C runtime library,并使用_beginthreadex()和 _endthreadex():
(1)、使用malloc()和free(),或是new和delete;
(2)、使用stdio.h或io.h里面声明的任何函数;
(3)、使用浮点变量或浮点运算函数;
1、_beginthreadex()
2、CreateThread()
说明:
1、前者是Mulit-Threads C Runtime库中的函数,后者是Windows API 库中的函数。
2、前者是对后者的封装。
3、前者使得每个线程都将拥有自己专用的一块内存区域来供标准C运行库中所有有需要的函数使用。
4、如果线程中调用了C Run Time Library 中的函数,那么必须使用前者。即:如果在除主线程之外的任何线程中进行以下操作,你就应该使用多线程版本的C runtime library,并使用_beginthreadex()和 _endthreadex():
(1)、使用malloc()和free(),或是new和delete;
(2)、使用stdio.h或io.h里面声明的任何函数;
(3)、使用浮点变量或浮点运算函数;
(4)、调用任何一个使用了静态缓冲区的runtime函数,比如:asctime(),strtok()或rand()。
方法一:使用_beginthreadex()函数创建。
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <Windows.h>
unsigned _stdcall ThreadProc(void* param)
{
while (1)
{
//do something.
}
return 0;
}
int main()
{
HANDLE h = (HANDLE)_beginthreadex(NULL, 0, ThreadProc, NULL, NULL, NULL);
WaitForSingleObject(h, INFINITE);
CloseHandle(h);
return 0;
}
方法二:使用CreateThread()函数创建
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <Windows.h>
DWORD WINAPI ThreadProc(LPVOID lparam)
{
while (1)
{
//do something.
}
return 0;
}
int main()
{
HANDLE h = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
WaitForSingleObject(h, INFINITE);
CloseHandle(h);
return 0;
}