在此引入几个函数:
创建线程函数:
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);