Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Вниз

Как правильно сделать паузу по времени?   Найти похожие ветки 

 
Zilog   (2008-12-16 15:47) [0]

Как правильно сделать паузу по времени?
скжем, работает поток, в котором я хочу сделать паузу в 10 минут. Как это сделать?

Если память не изменяет, надо получить системное время + колво времени паузы, и сидеть в цикле пока текущее не сравняется с заданным.. так?

Функции бы ещё кто-нибудь напомнил..


 
clickmaker ©   (2008-12-16 15:53) [1]

Sleep(10 * 60 * 1000)


 
Anatoly Podgoretsky ©   (2008-12-16 16:02) [2]

> Zilog  (16.12.2008 15:47:00)  [0]

Хакер дал такой совет или ламер?
Sleep смотри


 
Ega23 ©   (2008-12-16 16:59) [3]


> Если память не изменяет, надо получить системное время +
> колво времени паузы, и сидеть в цикле пока текущее не сравняется
> с заданным.. так?
>


Нет, не так.

1. Осенью время имеет обыкновение прыгать на час назад, а весной - на час вперёд.
2. Даже если время брать в UTC, то всё равно я ручками могу время перевести, хоть на год назад. Год + час будешь ждать?  :)


 
Zilog   (2008-12-16 17:32) [4]

Anatoly Podgoretsky, незнаю, кто дал совет - давным давно кто то тут акое предлагал.

Если слип большой делать - поток зависает на это время, а мне надо контролировать необходимость выхода из него. Если делать цикл - то это нарушает течение времени...


 
Jeer ©   (2008-12-16 17:36) [5]


> Если делать цикл - то это нарушает течение времени...
>


Ну вот, а мы боялись какого-то адронного коллайдера.
А, прямо сейчас, человек уже нарушает нам течение времени.
Брось это занятие.


 
Ega23 ©   (2008-12-16 17:43) [6]


> Если слип большой делать - поток зависает на это время,
> а мне надо контролировать необходимость выхода из него.
> Если делать цикл - то это нарушает течение времени...


Элементарно, Ватсон.

TMyThread = class (TThread);
private
 FNextExec : Cardinal;
protected
 procedure Execute; override;
public
 constructor Create;
end;  

constructor TMyThread.Create;
begin
 FNextExec := GetTickCount;
end;

procedure TMyThread.Execute;
begin
 while not Terminated do
 begin
   try
     if GetTickCount<FNextExec then Continue;
     ...... Работа Execute;

     FNextExec := GetTickCount + 600000;
   finally
     Sleep(20);
   end;
 end;
end;


Ну и учитываешь, что при ап-тайме компа в 49 с чем-то там суток счетчик GetTickCount в 0 сбросится.


 
Zilog   (2008-12-16 18:03) [7]

Ega23, спасибо!

Остался ещё один вопрос - желаю проинформировать общественность, сколько осталось до окончания паузы. Как бы это вычислить?


 
Anatoly Podgoretsky ©   (2008-12-16 18:25) [8]

> Zilog  (16.12.2008 17:32:04)  [4]

Приведеный код неверный, результат фунции CreateProcess bool, а не boоlean


 
Loginov Dmitry ©   (2008-12-16 23:22) [9]

> скжем, работает поток, в котором я хочу сделать паузу в
> 10 минут. Как это сделать?


> Если слип большой делать - поток зависает на это время,
> а мне надо контролировать необходимость выхода из него.


для подобных требований удобно использовать эвенты.
Нужны 3 функции:
-CreateEvent()
-SetEvent()
-WaitForSingleObject()

Где-нибудь создаешь эвент в состоянии RESET (занят). (HEvent := CreateEvent(nil, True, False, nil))
В потоке для осуществления задержки вызываешь вместо Sleep() функцию WaitForSingleObject(HEvent, 10*60*1000).
для досрочного прерывания задержки используешь функцию SetEvent(HEvent) (можно из любого потока),
которая переводит эвент в состояние "свободен".
Когда эвент не нужен, можно его удалить (CloseHandle(HEvent))



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.02.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-1207674401
Ampleyev
2008-04-08 21:06
2009.02.01
Помогите со стегоалгоритмом


2-1229292385
Tatb9na
2008-12-15 01:06
2009.02.01
Файлы Delphi


2-1229535561
smartleds
2008-12-17 20:39
2009.02.01
Ошибка при сохранении файла


2-1229501340
charoey_mag
2008-12-17 11:09
2009.02.01
Работа с Unicode


15-1228730968
aston2204
2008-12-08 13:09
2009.02.01
Определить СУБД по файлу БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский