Показать сообщение отдельно

WaitForMultipleObjects для завершения потоков
  #1  
Старый 12.12.2009, 19:06
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
С нами: 10943066

Репутация: 1236


По умолчанию WaitForMultipleObjects для завершения потоков

вообщем простая подмена (не идеальная конечно) для WaitForMultipleObjects (когда речь идет об n потоках, причем n > MAXIMUM_WAIT_OBJECTS) и нам нужно ждать когда все они завершатся.

Код:
#include "stdafx.h"
#include <conio.h>
#include <windows.h>


DWORD g_dwThreadsCompleted;
CRITICAL_SECTION g_cs;

//////////////////////////////////////////////////////////////////////////
DWORD WINAPI SampleThread(LPVOID lp)
{
	Sleep(1000);

	EnterCriticalSection(&g_cs);
	g_dwThreadsCompleted++;
	LeaveCriticalSection(&g_cs);

	printf("thread #%d completed\n", (int)lp);
	return 0;
}

//////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{

	InitializeCriticalSection(&g_cs);
	g_dwThreadsCompleted = 0;

	HANDLE threads[100];
	DWORD num_threads = 100; // sizeof(threads)/sizeof(HANDLE)
	DWORD tid;

	printf("spawning and awaiting threads to be completed!\n\n");


	for(int i=0; i<num_threads; i++)
		threads[i] = CreateThread(0,0,SampleThread,(LPVOID)i,0,&tid);


	// now wait for the threads will be completed
	while(g_dwThreadsCompleted<num_threads)
		Sleep(500);

	printf("wait completed\n");

	return getch();
}
__________________


snow white world wide

Последний раз редактировалось sn0w; 12.12.2009 в 19:09..
 
Ответить с цитированием