关于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一多也不行,反正 这个 我很困惑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值