在此引入几个函数:
创建线程函数:
1、通过CreateThread(),对应线程结束函数ExitThread();
2、通过_beginthread(),对应线程结束函_endthread();
3、在MFC程序中还可以通过AfxBeginThread();对应线程结束函数AfxEndThread(),它们是MFC层面进行的再次封装。
int count;
DWORD WINAPI ThreadFun1(LPVOID pM)
{
cout<<"子线程ID为:"<<GetCurrentThreadId()<<endl;
return 0;
}
unsigned int __stdcall ThreadFun2(LPVOID pM)
{
count++;
cout<<"子线程ID为:"<<GetCurrentThreadId()<<" "<<count<<endl;
return 0;
}
UINT ThreadFun3(LPVOID n)
{
cout<<"子线程ID为:"<<GetCurrentThreadId()<<endl;
return 0;
}
void test1()
{
HANDLE handle=CreateThread(NULL,0,ThreadFun1,NULL,0,NULL);
WaitForSingleObject(handle,INFINITE);
}
void test2()
{
const int thread_num=15;
HANDLE handle[thread_num];
for (int i=0;i<thread_num;i++)
{
handle[i]=(HANDLE)_beginthreadex(NULL,0,ThreadFun2,NULL,0,NULL);
WaitForMultipleObjects(thread_num,handle,TRUE,INFINITE);
}
}
void test3()
{
CWinThread *pThreads;
int i=1;
pThreads=AfxBeginThread(ThreadFun3,(LPVOID)i,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
ASSERT(pThreads);
pThreads->m_bAutoDelete=FALSE;
pThreads->ResumeThread();
WaitForSingleObject(pThreads->m_hThread,INFINITE);
delete pThreads;
}
其应用如上。
其函数API如下:
WinBase.h
WINBASEAPI
__out_opt
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
);
process.h
_CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void * _Security, _In_ unsigned _StackSize,
_In_ unsigned (__stdcall * _StartAddress) (void *), _In_opt_ void * _ArgList,
_In_ unsigned _InitFlag, _In_opt_ unsigned * _ThrdAddr);
afxwin.h
CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,
DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);