// WIN32THREAD.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
DWORD WINAPI HelloThread(LPVOID);
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThrd;
DWORD threadId;
DWORD exitCode = 0;
int i =13;//传递到线程里的参数
int rc;
/*
* CREATE_SUSPENDED线程挂起。
* hThrd属于进程 核心对象拥有,非该线程拥有。
* 销毁的时候计数-1,默认线程计数为2。
*/
hThrd = CreateThread(NULL,0,HelloThread,(LPVOID)i,CREATE_SUSPENDED,&threadId);
ResumeThread(hThrd);
//等待方式1
//Sleep(20000);
/*
* BUSY LOOP,等待方式2,大量的CPU等待资源浪费
* 持续不断检查返回值可以决定一个线程是否还在运行,1-2个线程可以这样。
* 绝对不要在WIN32中这样使用
*/
//for (;;)
//{
////线程状态判断,不是好方法,无法确定线程还在运行,是否结束。是线程函数的返回值、
//GetExitCodeThread(hThrd,&exitCode);
//if(exitCode != STILL_ACTIVE)
//{
// puts("线程死了");
//
//}
//else
//{
// puts("线程活了");
//
//}
//}
/*
* 等待方式3
* 主线程睡眠等待,HelloThread线程开始
*/
rc=GetLastError();
if(rc == WAIT_OBJECT_0)
{
puts("激活");
}
WaitForSingleObject(hThrd, INFINITE);
CloseHandle(hThrd);
return EXIT_SUCCESS;
}
/// <summary>
/// 线程处理函数
/// </summary>
DWORD WINAPI HelloThread(LPVOID n)
{
printf("%d",n);
MessageBox(NULL, _T("hello"), TEXT("O(∩_∩)O~"), 0);
return 0;
}
总结: