1

我有一个手动重置事件来控制(暂停和恢复)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、内存、...)?

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

4

1 回答 1

0

在此处选择手动停止事件会导致在设置事件时循环处于忙碌状态(100% cpu)。因此,您的代码中必须有另一部分重置事件,或者您只是忘记在WAIT_OBJECT_0案例中重置事件?

这是好习惯吗?好吧,当没有设置事件时,这段代码只是在等待(INFINITE)。但是,当设置事件时,这只是忙于轮询事件以重置。我怀疑你想在这个案子中做其他事情,WAIT_OBJECT_0并且你想拥有外部控制权。WaitForSingleObject你可以这样做,在循环中使用没有问题。

于 2013-09-25T08:16:12.843 回答