Конференция "Основная" » Проблема с таймером
 
  • mr. Eof (11.03.08 23:38) [20]

    > Резюме: или делать в консоли второй поток с Waitable Timer

    Я правильно понимаю, что имеется ввиду это:

    procedure Wait(lNumberOfSeconds : Longint);
    const
    _SECOND = 10000000;
    var
    lBusy : LongInt;
    hTimer : LongInt;
    liDueTime : LARGE_INTEGER;

    begin
    hTimer := CreateWaitableTimer(nil, True, 'WaitableTimer');
    if hTimer = 0 then
    Exit;
    liDueTime.QuadPart := -10000000 * lNumberOfSeconds;
    SetWaitableTimer(hTimer, TLargeInteger(liDueTime), 0, nil, nil, False);

    repeat
    lBusy := MsgWaitForMultipleObjects(1, hTimer, False,
    INFINITE, QS_ALLINPUT);
    Application.ProcessMessages;
    Until lBusy = WAIT_OBJECT_0;

    CloseHandle(hTimer);
    End;

    begin
    while True do
     begin
       writeln('Output');
       wait(10);
     end;
    end.



    ?
  • DVM © (11.03.08 23:48) [21]

    > mr. Eof  

    А что в конечном результате ты хочешь сделать? А т не очень понятны все эти пляски с таймерами и задержками.
  • mr. Eof (12.03.08 00:17) [22]

    > А что в конечном результате ты хочешь сделать? А т не очень
    > понятны все эти пляски с таймерами и задержками.

    DVM, в данном случае это не принципиально. Руководство поставило задачу модифицировать существующее приложение, и одним из требований является постоянная работа сервиса..
    Я сделал это используя sleep и на 1й взгляд все норм работает.
    Однако после сообщений Leonid Troyanovsky, я сильно засомневался...
  • Сергей М. © (12.03.08 08:31) [23]

    > постоянная работа сервиса


    А до постановки задачи она, надо понимать, непостоянная ?
    И как же эта "непостоянность" проявляется ?


    > lBusy := MsgWaitForMultipleObjects(1, hTimer, False,
    > INFINITE, QS_ALLINPUT);
    > Application.ProcessMessages;


    Какой еще Application ?
    У тебя же консольное приложение, судя по приведенному коду, не использует VCL ?..
  • Leonid Troyanovsky © (12.03.08 13:37) [24]

    > mr. Eof   (11.03.08 23:38) [20]

    > Я правильно понимаю, что имеется ввиду это:

    Только не это :)

    Или два потока в консоли, или GUI приложение (да хотя бы и сервис)
    с окном верхнего уровня.

    --
    Regards, LVT.
  • DVM © (12.03.08 13:45) [25]

    > и одним из требований является постоянная работа сервиса.
    > .

    Так сервис или консольное приложение? Пока что сервисами в примерах выше и не пахнет.
  • Dm1tr1y (12.03.08 19:49) [26]
    Сервис. Результат - dll.
    В консоли я тестирую, так как похоже.
    По поводу Application.ProcessMessages - да, не подойдет. Я не заметил сразу :)
  • Dm1tr1y (12.03.08 19:50) [27]
    Да, до этого приложение было консольным и запускалось по требованию пользователя, вручную.
  • Германн © (13.03.08 00:57) [28]

    > В консоли я тестирую, так как похоже.

    А что мешает тестировать в сервисе?

    P.S. А вот использовать разные ники в одной ветке некошерно. Можешь огрести за нарушение правил форума.
 
Конференция "Основная" » Проблема с таймером
Есть новые Нет новых   [134483   +44][b:0][p:0.001]