zoukankan      html  css  js  c++  java
  • 关于WinAPI的WaitForMultipleObjects使用的一个疑惑。

    首先来一个可用的 程序,WaitForMultipleObjects会等现成结束后,才会继续走下去。【本例子从msdn官网改造 http://msdn.microsoft.com/en-us/library/ms686927(v=vs.85).aspx 】

    #include <windows.h>
    #include <stdio.h>
    
    #define THREADCOUNT 4
    
    DWORD WINAPI WriteToDatabase( LPVOID );
    
    int main( void )
    {
        HANDLE aThread[THREADCOUNT];
        int i;
        // Create worker threads
    
        for( i=0; i < THREADCOUNT; i++ )
        {
            DWORD ThreadID;
            aThread[i] = CreateThread(
                         NULL,       // default security attributes
                         0,          // default stack size
                         (LPTHREAD_START_ROUTINE) WriteToDatabase,
                         NULL,       // no thread function arguments
                         0,          // default creation flags
                         &ThreadID); // receive thread identifier
    
            if( aThread[i] == NULL )
            {
                printf("CreateThread error: %d\n", GetLastError());
                return 1;
            }
        }
    
        // Wait for all threads to terminate
        printf("~~WaitForMultipleObjects Start...\n");
        WaitForMultipleObjects(THREADCOUNT, aThread, TRUE, INFINITE);
        printf("~~WaitForMultipleObjects End...\n");
        // Close thread and mutex handles
    
        for( i=0; i < THREADCOUNT; i++ )
            CloseHandle(aThread[i]);
        return 0;
    }
    
    DWORD WINAPI WriteToDatabase( LPVOID lpParam )
    {
        // lpParam not used in this example
        UNREFERENCED_PARAMETER(lpParam);
        // Request ownership of mutex.
    
        printf("Thread %d writing to database...\n",GetCurrentThreadId());
        Sleep(1500);
            
        return TRUE;
    }

    把 THREADCOUNT 线程数 修改为100,再运行,立刻结束,很郁闷。

    把 THREADCOUNT 线程数 修改为50,再运行,正常等待线程结束。

    我不知道究竟是哪里的问题。。。

    线程一多就失效了,暂时用: http://msdn.microsoft.com/en-us/library/ms687055(v=vs.85).aspx Waiting for Multiple Objects (Windows) 建立一个Event 来等待。或许Event一多也不行,反正 这个 我很困惑。

  • 相关阅读:
    hdu 5001(概率DP)
    hdu 5505(数论-gcd的应用)
    csu 1749: Soldiers ' Training(贪心)
    Button Bashing(搜索)
    Jury Jeopardy(反向模拟)
    interesting Integers(数学暴力||数论扩展欧几里得)
    湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)
    csu 1551(线段树+DP)
    csu 1555(线段树经典插队模型-根据逆序数还原序列)
    csu 1552(米勒拉宾素数测试+二分图匹配)
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2767628.html
Copyright © 2011-2022 走看看