1)线程的创建
创建函数--引用MSDN上的函数
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );
第一个参数 pThreadAttributes 是函数的安全属性,开始设置为默认安全属性 NULL
第二个参数 dwStackSize 是开始分配给线程的堆栈页面的大小 可以设置为默认大小 0
第三个参数 lpStartAddress 线程的入口函数 可以任意设置
DWORD WINAPI Fun1Pro(LPVOID lpParameter);
第四个是传递给线程的参数,类型为指针型 可以为NULL
第五个参数 dwCreationFlags 指线程何时调用 如果是CREATE_SUSPENDED 那么线程在创建的时候不运行
直到调用ResumeThread函数
如果为0 那么在线程创建完成后就开始运行;
第六个参数 lpThreadId是用来传递线程ID的 如果为NULL 则不返回线程ID
下面是我开始做的一个线程程序
DWORD WINAPI Fun1Pro(LPVOID lpParameter);
void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Pro,NULL,0,NULL);
CloseHandle(hThread1);
cout<<"main thread run"<<endl;
}
DWORD WINAPI Fun1Pro(LPVOID lpParameter)
{
cout<<"thread2 is run"<<endl;
return 0;
}
这个程序运行得不到理想得结果,就是当主线程运行完成后,我创建的那个进程没有得到运行,翻看资料得到得结果是:当主线程执行完毕后,主线程退出,主线程退出,那么它创建得进程也就要随之退出,这就是得不到thread2 is run得原因;
为了让创建得进行能够运行,总要引进一个Sleep函数,在主函数得出口处调用该函数,就可以让主线程暂定运行,也就驶说主线程放弃了CPU,这样创建的进程就有机会执行了void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Pro,NULL,0,NULL);
CloseHandle(hThread1);
cout<<"main thread run"<<endl;
Sleep(10);
}