【windows編程】等待線程退出

等待線程退出

主要函數:WaitForMultipleObjects

DWORD WINAPI WaitForMultipleObjects(
  _In_       DWORD   nCount,
  _In_ const HANDLE  *lpHandles,
  _In_       BOOL    bWaitAll,
  _In_       DWORD   dwMilliseconds
);

參數含義:

  • 第一個參數 DWORD dwCount 爲等待的內核對象個數,可以是0到MAXIMUM_WAIT_OBJECTS(64)中的一個值。
  • 第二個參數 CONST HANDLE* phObjects 爲一個存放被等待的內核對象句柄的數組
  • 第三個參數 BOOL bWaitAll 是否等到所有內核對象爲已通知狀態後才返回,如果爲TRUE,則只有當等待的所有內核對象爲已通知狀態時函數才返回,如果爲FALSE,則只要一個內核對象爲已通知狀態,則該函數返回。
  • 第四個參數 DWORD dwMilliseconds 爲等待時間,和WaitForSingleObject中的dwMilliseconds參數類似
#include <stdio.h>
#include <windows.h>

const unsigned int THREAD_NUM = 10;
DWORD WINAPI  ThreadFunc(LPVOID);

int main()
{
	printf("我是主線程, pid = %d\n", GetCurrentThreadId());  //輸出主線程pid
	HANDLE hThread[THREAD_NUM];
	for (int i = 0; i < THREAD_NUM; i++)
	{
		hThread[i] = CreateThread(NULL, 0, ThreadFunc, &i, 0, NULL); // 創建線程
	}
	
	WaitForMultipleObjects(THREAD_NUM,hThread,true, INFINITE);	//一直等待,直到所有子線程全部返回
	return 0;
}

DWORD WINAPI  ThreadFunc(LPVOID p)
{
	int n = *(int*)p;
	Sleep(1000*n);  //第 n 個線程睡眠 n 秒
	printf("我是, pid = %d 的子線程\t", GetCurrentThreadId());   //輸出子線程pid
	printf(" pid = %d 的子線程退出\n\n", GetCurrentThreadId());   //延時10s後輸出

	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章