Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Я про Время хотел поинтересоваться


Автор: [ss]3L33T@ 26.10.2003, 09:14
Я не так уж давно кодю на си и хотел бы знать:
Как мне после 20 сек. от запуска программы выдать надпись "Hello World".
Вообщем хочу узнать, как работать с таймером.
Если не в лом напишите пример plz, только не сложный....

Автор: Kefir 26.10.2003, 09:39
Код
#include <windows.h>
#include <fstream.h>
int main()
{
 Sleep(20 * 1000);
 cout<<"Hello, World!\n";
}

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp

Автор: [ss]3L33T@ 26.10.2003, 09:46
Я не про задержку, а про таймер.
Т.е. например - идёт бесконечный цикл, а через 20 сек. он прерывается...

Автор: mr.DUDA 26.10.2003, 10:43
Бесконечный цикл напрягает процессор на 100%.
Используй WaitForSingleObject с заданной задержкой, или создавай waitable timer в окне и лови WM_TIMER в оконной функции.

Автор: [ss]3L33T@ 26.10.2003, 10:59
2 mr.DUDA: И как это сделатьconfused.gif?приведи листинг проги. А на счёт цикла - это я для примера.

Автор: RAN 26.10.2003, 11:20
Поищи на форуме по строке "WM_TIMER", например. Такой вопрос поднимается регулярно.

Автор: [ss]3L33T@ 26.10.2003, 11:29
2 RAN:
Ты там писал:
Да, проще таймер.

Инициализируешь таймер
UINT uTimerID = SetTimer(hwnd, 0, 0, NULL);
SetTimer(hwnd, uTimerID, 1000, NULL);

Теперь окно каждую секунду будет получать сообщение WM_TIMER
В нём меняешь картинку

Когда надо заклнчить вызываешь KillTimer(hwnd, uTimerID)


Приведи плиз примерчик. И если можно перечисли все виды сообщений от WM_TIMER.

Автор: RAN 26.10.2003, 11:37
А чего не понятно?

В WM_CREATE, например, главного окна вызываешь SetTimer. Теперь через указанное кол-во миллисекунд получишь WM_TIMER. Выводишь в WM_TIMER "Hello world" и вызываешь KillTimer, чтоб сообщение больше не получать. Всё.

Автор: [ss]3L33T@ 26.10.2003, 11:46
Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz-Zz.
Я тупой.
Приведи пример без привязки к опред. окну(hwnd). и поподробней, я совсем ни черта не понимаю.

Автор: RAN 26.10.2003, 12:19
Цитата
Приыеди пример без привязки к опред. окну(hwnd). и поподробней


Это возможно, но сложнее. Не хочу тебя путать. Ты на чём пишешь?

Автор: [ss]3L33T@ 26.10.2003, 12:25
Ты всмысле разкладки клавы? smile.gif.
VC++ 6.0, .NET.
Если я тебя правильно понял.

Автор: RAN 26.10.2003, 12:42
MFC? API? .NET Framework?

Автор: [ss]3L33T@ 26.10.2003, 12:58
MFC, для OpenGL.
Я сейчас только на нём. А если что по мелочи, то в стандартом Console Application'е.

Автор: GanZaleZ 26.10.2003, 16:51
Ну впринципе же можна получить hWnd консольного окна ? ну тогда почему бы его и не передать ?
Нужно попробофать smile.gif
А в остальном значить фроде дело обстоит так :

Код


VOID CALLBACK TimerProc( HWND hwnd,  UINT uMsg,  UINT_PTR idEvent,  DWORD dwTime)
{
  // делаеш что нужно , эта колбек функция вызывается системой по проходу заданого времени
  // Но тут нуно запомнить что Указатель допустим на this сюда не передается ! ну это так к слову
  // И если хочеш чтото зделать с какойто переменной то указатель на нее нужно передать в Эту функцию и получить в ней в качестве ПОМОЕМУ 3 аргумента !!!!
}



//  Когда те нуно задать время вызываеш эту функцию и ........

SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse,  TIMERPROC lpTimerFunc );

// Попробуй передать hWnd  консольного окна , ведь оно окно , значить тоже имеет hWnd !
// nIDEvent Это как раз КОНТЕЙНЕР в котором можно передать в ту КАЛБЭК функцию разную Информацию например Указатель на какуюто переменную которую нужно изменить по прохождению какогото времени ! :)
// uElapse - Время ожидания !
// lpTimerFunc - Имя Функции которая Вызофется по прохождению времени ТОБИШ TimerProc




Вроде все Ферно но мугут быть ошибки , вчасности с Аргументом которым передается информация ,
Дафно я этим не занимался smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)