| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Не могу создать TTimer без компоненты на форме |
| Автор: Liner 11.4.2006, 21:52 |
| Если просто выбрать компоненту Timer и поместить ее на форме, то все нормально работает (для начала хотя бы раз в секунду выводить чего-нибудь в Memo). А если перенести TTimer *Timer1 из __published в private, то "волшебная" функция TForm1::Timer1Timer уже не работает. Смутно подозреваю, в чем дело (// IDE-managed Components), но только смутно. Как мне сделать свою функцию обработки события TTimer'a? ЗЫ. В итоге вместо TForm1 будет свой класс, на который "часики" из компонет не перетащить. |
| Автор: vivat 12.4.2006, 05:45 | ||||
unit1.h
unit1.cpp
|
| Автор: Liner 12.4.2006, 12:14 | ||
Спасибо, но это масло масляное, мне-то нужно без формы, например, в консольном приложении:
|
| Автор: _hunter 12.4.2006, 12:21 |
| myFunc д.б. членом класса. |
| Автор: pandrew 12.4.2006, 14:24 | ||||
А вот без окна не получится. Почитай в хелпе про SetTime(WinAPI), WM_TIMER.. и м.б. вопросы исчезнут. |
| Автор: Liner 12.4.2006, 18:47 | ||
pandrew, на строчку
ругается, что конфликт с TWinControl. И в TWinControl конструктора вообще нет. To All: А через SetTimer, WM_TIMER чего-то еще запутаннее получается. Может, кто сможет быстро набросать простейший примерчик? |
| Автор: _hunter 12.4.2006, 19:00 |
| vcl.h подключен? |
| Автор: Ctrl_Alt_Del 12.4.2006, 19:01 | ||
| Liner, сначала устанавливаешь таймер
Id - идентификатор, MSec - количество миллисекунд Потом ловишь WM_TIMER, в котором свой таймер можешь узнать сравнив идентификатор с wParam. Собственно все. |
| Автор: Liner 12.4.2006, 22:53 | ||
| Чего-то я совсем запутался. Никак не могу понять, что должно происходить? В этом коде msg.message никогда не бывает WM_TIMER.
(написано с помощью help'а и такой-то матери pandrew написал, что без окна не получится, может в этом дело? Неужели в Windows нельзя создать процесс без визуального оформления, который бы, например, раз в секунду писал в text.txt строчку "text"?! Как-то же это должно просто делаться, но во всех моих книжках либо через компоненту Timer, что элементарно, либо какое-то жуткое создание новых визуальных компонент. |
| Автор: Ctrl_Alt_Del 12.4.2006, 23:08 | ||
| Liner, правильно не получается. Сообщения посылаются ОКНУ. Сделай так:
|
| Автор: Liner 13.4.2006, 22:32 | ||
Вот что удалось в итоге сделать:
Но это совершенно не годится, т.к. нужно одновременно еще что-делать, должны работать другие потоки. Без этого while как-то можно обойтись? Вообще, нужно сделать класс, в котором есть несколько функций, реагирующих на определенные события в очередях (это уже сделано). И вот нужна еще одна функция, которая бы хотя бы просто раз в секунду "сама по себе" вызывалась, не мешая вызываться остальным. Не верю, что это невозможно. |
| Автор: Bima 8.5.2007, 08:40 |
| Вот писал когда то приложения для тестирования таймеров с разными интервалами... можно и приспособить для консольного приложения, главное указать функции где ты обрабатываешь таймеры. Ничего не зависает и все работает, причем можно параллельно выполнять другие функции программы, так как вызов функции таймера происходят по прерываниям. |
| Автор: TheOne81 9.5.2007, 17:50 |
| Я бы посоветовал создавать поток, начинающийся, к примеру, со Sleep(время), после чего - собственно обработка события. Общение с главной формой, если таковая есть - через сообщения, если ни формы, ни класса нету (консолька) - то можно аккуратно пользовать глобальные переменные, хоть и не красиво. Однако, если на одну глобальную переменную приходится несколько потоков, то во избежание - придется еще заюзать мьютексы или семафоры. |