Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

будильник на API [D7, WinXP]


Страницы:   1 2

Dmitry_177 ©   (2006-10-20 12:26:00) 

Хочу сделать будильник на API, используя функции CreateWaitableTimer и SystemTimeToFileTime. Т.к. в них нельзя задать определенное время, например в 18:00 чтобы прозвенел, нужно при установке таймера посчитать разницу между 18:00 и системным временем, и поставить этот интервал, чтобы через такой момент времени сработал будильник... Помогите пожалуйста с реализацией


const
 HOUR = 18;

var
 hTimer: THandle;
 sysTime: TSystemTime;
...

hTimer := CreateWaitableTimer(nil, false, nil);
GetLocalTime(sysTime);   // получили системное время
HOUR - sysTime.wHour;   // как получить разницу? Подскажите пожалуйста...

SetWaitableTimer(hTimer, ..., 0, nil, nil, false);


tesseract   (2006-11-09 18:00:00) [1]

Да и не забудь про то, что user-таймер в windows работает с точностью слепого стрелка - т.е с никакой, и изредка желательно проверять системное время.


Ketmar   (2006-11-08 20:20:00) [2]

>[37] Dmitry_177 8-Nov-2006, 19:54
>Да не.. Я по C++ читал, но я как понял _BeginThreadEx из C+
>+ это BeginThread в Delphi т.к. BeginThreadУч нету...
плохо понял.

>жаль... может названия тем дадите хотябы или ссылки?
сколько платишь за поиск информации?


Dmitry_177   (2006-11-08 19:54:00) [3]


> Рихтер уже о Delphi пишет? фигасе прогресс...

Да не.. Я по C++ читал, но я как понял _BeginThreadEx из C++ это BeginThread в Delphi т.к. BeginThreadУч нету...
> потому что двойка тебе. это здесь столько раз обсуждали,
>  что повторять смысле не вижу.

жаль... может названия тем дадите хотябы или ссылки?


Ketmar   (2006-11-08 18:43:00) [4]

>[35] Dmitry_177 8-Nov-2006, 18:07
>Почитал Рихтера, там рекомендуется использовать
>BeginThread а не  CreateThread...
Рихтер уже о Delphi пишет? фигасе прогресс...

>Почему нельзя выполнить этот код в процессе
потому что двойка тебе. это здесь столько раз обсуждали, что повторять смысле не вижу.


Dmitry_177   (2006-11-08 18:07:00) [5]

Почитал Рихтера, там рекомендуется использовать BeginThread а не  CreateThread... То что BeginThread создает защищенный поток и выделяет память под него и т.д... С этим вроде понятно... Но а зачем мы шлем сообщение WM_USER+1 из потока в программу? Почему нельзя выполнить этот код в процессе как показано в Dmitry_177   (05.11.06 22:32) [26]???


Ketmar   (2006-11-06 22:05:00) [6]

>[32] Dmitry_177 6-Nov-2006, 21:32
>Искал я, всеже я не нашел разницы между BeginThread и
>CreateThread...
ищи дальше. попробуй, наконец, справку почитать, если ничего больше не помогло.


Орион   (2006-11-06 21:44:00) [7]

> [32] Dmitry_177   (06.11.06 21:32)


Видишь суслика? А он есть :)


Dmitry_177   (2006-11-06 21:32:00) [8]

Искал я, всеже я не нашел разницы между BeginThread и CreateThread...


Ketmar   (2006-11-06 00:19:00) [9]

>[30] Dmitry_177 6-Nov-2006, 00:16
>Мне же хочется знать и не задавать глупые вопросы.. И с
>> BeginThread работает код а с CreateThread нет?
>тоже самое...(((
таки ты не поверишь: для любознательных в Borland справку сочинили.


Dmitry_177   (2006-11-06 00:16:00) [10]


> когда же мы твое творение увидим? или не увидим?)

))))
Ну так почему там не в WaitThread эти строки???:
Windows.Beep(800,200);
ShowMessage('Timer');

Мне же хочется знать и не задавать глупые вопросы.. И с
> BeginThread работает код а с CreateThread нет?

тоже самое...(((


Ketmar   (2006-11-06 00:03:00) [11]

лучше пусть не увидим...


Орион   (2006-11-05 23:34:00) [12]

Dmitry_177, когда же мы твое творение увидим? или не увидим?)


Ketmar   (2006-11-05 23:00:00) [13]

>[26] Dmitry_177 5-Nov-2006, 22:32
>Почему код GanibalLector ©  (22.10.06 13:31) [13] с
>BeginThread работает код а с CreateThread нет?
иди читать справку.


Dmitry_177   (2006-11-05 22:32:00) [14]

Почему код GanibalLector ©   (22.10.06 13:31) [13]с BeginThread работает код а с CreateThread нет? А еще зачем мы передаем сообщение WM_USER+1 из самой программы в нее же? Вот так нельзя сделать без сообщения?

function WaitThread(Param: PMyMode): DWord;
begin
WaitForSingleObject(Param.hTimer,INFINITE);
CloseHandle(Param.hTimer);
Windows.Beep(800,200);  //  Почему не тут эти строки там? Так же тоже работает...
ShowMessage('Timer');    //
Dispose(Param);
Result:=0;
end;


Ketmar   (2006-10-24 17:29:00) [15]

>[24] Dmitry_177 24-Oct-2006, 15:54
>Ketmar я понял что переполнение, а чего? )))
ты не поверишь: переменных. на:
ft2.dwHighDateTime:=ft2.dwHighDateTime+201;
ft2.dwLowDateTime:=ft2.dwLowDateTime+ 711573504;

медитируй.


Dmitry_177   (2006-10-24 15:54:00) [16]

Ketmar я понял что переполнение, а чего? )))


Ketmar   (2006-10-24 11:25:00) [17]

>[22] Dmitry_177 24-Oct-2006, 11:19
>Ketmar, подскажи пожалуйста где там ошибка?
а я уже подсказал. почитай [20] внимательно.


Dmitry_177   (2006-10-24 11:19:00) [18]

Ketmar, подскажи пожалуйста где там ошибка?

А еще скажите пожалуйста, в коде GanibalLector ©   (22.10.06 13:31) [13]неужели лучше использовать сообщение? Т.е. программе передавать сообщение WM_USER+1 по сути дела самой себе.. Может лучше было бы просто вызвать процедуру Successв функции WaitThread? Если нет скажите пожалуста, мне это очень интересно знать...

Я как понял лучше использовать код Dmitry_177   (22.10.06 18:55) [16]чем Dmitry_177   (23.10.06 20:40) [18]?

Спасибо.


GanibalLector   (2006-10-24 01:28:00) [19]

2 Leonid Troyanovsky ©   (23.10.06 20:46) [19]

> после 4 дней обучения это ты нам должен докладывать,
как лучше работать с системным временем.

Чуть со стула не упал :))) Ржунамагу )))


Ketmar   (2006-10-23 20:48:00) [20]

>[18] Dmitry_177 23-Oct-2006, 20:40
>Кстати мне тут подсказали вот такой код
...с ошибкой. хинт: переполнение.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо