WaitForSingleObject(handle, INFINITE);

Discussion in 'WASM.WIN32' started by _DEN_, Apr 5, 2009.

  1. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    INFINITE = 0xFFFFFFFF, то есть при гранулярности в миллисекунду соответствует интервалу в ~49,7 дней.

    В MSDN сказано, что "If dwMilliseconds is INFINITE, the function's time-out interval never elapses". И все-таки, будет ли ожидание действительно вечным, или все же не более 49,7 дней? Может быть более корректно писать

    while(WaitForSingleObject(handle, INFINITE) == WAIT_TIMEOUT);

    ?
     
  2. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    Логично было бы предположить, что интервал действительно сделали вечным в порядке исключения для данного конкретного значния. Тут наверное реверсить системные функции надо.
    А к чему такая точность, если не секрет? Какого события ты собрался 50 дней ждать? :)))
     
  3. dendi

    dendi New Member

    Blog Posts:
    0
    Joined:
    Sep 3, 2007
    Messages:
    233
    [deleted]
     
  4. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    MSoft

    Логично предположить, что винапи и msdn полны косяков :derisive:


    Да очень просто. Windows Service традиционно ждет евента на INFINITE, который сигналится по SERVICE_CONTROL_STOP. Получается если не сделать while, сервер будет останавливаться раз в 50 дней. Если вдруг получится так, что его никто за 50 дней не ребутнет, то для серьезного промышленного продукта это будет огромный косяк.
     
  5. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    _DEN_
    А с чего ты взял, что 0xFFFFFFFF это количество миллисекунд.
     
  6. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    вечным.
    см. BaseFormatTimeOut().
     
  7. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    Partner

    Ну второй параметр ето какбе dwMilliseconds.


    dendi
    n0name
    Так все-таки? :)
     
  8. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    n0name уже сказал - вечным.

    Code (Text):
    1. PLARGE_INTEGER
    2. BaseFormatTimeOut(
    3.     OUT PLARGE_INTEGER TimeOut,
    4.     IN DWORD Milliseconds
    5.     )
    6. {
    7.     if ( (LONG) Milliseconds == -1 ) {
    8.         return( NULL );
    9.         }
    10. ...
    11.   return Timeout;
    12. }
    Эта функция вызывается из Sleep(Ex) и WaitFor*** перед вызовом соотв. ZwApi.

    А передача NULL в качестве (PLARGE_INTEGER Timeout) делает ожидание вечным

    MSoft правильно угадал про конкретно данное значение)
     
  9. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    INFINITE конвертится еще на стадии kernel32.dll, в исходнике этого и быть не может.
     
  10. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    Great, n0name

    Понятно, спасибо.
     
  11. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    а мне? :)
     
  12. _DEN_

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    MSoft

    А тебе за что? :)
     
  13. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    Я самый первый тебе правильный ответ дал :) А Грейт подтвердил. А еще я умный вопрос задал :)))