Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   WaitForMultipleObjects для завершения потоков (https://forum.antichat.xyz/showthread.php?t=163000)

sn0w 12.12.2009 19:06

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();
}



Время: 02:00