在while循环中连续调用WaitForSingleObject是一种好习惯吗?

时间:2013-09-25 07:17:51

标签: multithreading events while-loop waitforsingleobject

我有一个手动重置事件来控制(暂停和恢复)while循环。所以在循环中,我必须不断检查事件信号状态

void my_loop()
{
    while(is_ok)
    {
        // Check whether event is in signaled state
        dwWaitResult = WaitForSingleObject( 
            ghEvent, // event handle
            INFINITE);    // indefinite wait

        switch (dwWaitResult) 
        {
            // Event object was signaled
        case WAIT_OBJECT_0: 
            printf("my_loop is working");
            break; 

            // An error occurred
        default: 
            printf("my_loop is halted");
            break;
        }

    }
}

这是好习惯吗?不断调用WaitForSingleObject会导致任何问题(CPU,内存,......)吗?

或者在这种情况下是否有更好的方法来检查事件状态?

1 个答案:

答案 0 :(得分:0)

在此处选择手动重新安装事件会导致循环繁忙(100%cpu),同时设置事件。因此,您的代码中必须有另一部分重置事件,或者您是否忘记在WAIT_OBJECT_0情况下重置事件?

这是一个好习惯吗?嗯,当没有设置事件时,这段代码只是等待(INFINITE)。但是,当设置事件时,这只是忙于轮询事件以重置。 我怀疑你想在WAIT_OBJECT_0的情况下做一些其他事情而你想要有外部控制。你可以这样做,在循环中使用WaitForSingleObject没有问题。