На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Все статьи должны быть оформлены согласно Правил оформления статей.
2. Любые обсуждения должны происходить в специальной теме, обсуждение в любых других темах раздела запрещены.
3. Запрещается писать статьи о создании и распространении вирусов, троянов и других вредоносных программ!
4. За грамотно написанные и правильно оформленные статьи авторы награждаются DigiMoney.

Дополнительные ссылки:
Желаю творческих успехов! ;)
Модераторы: Jin X
  
    > Таймер в консольной программе , Windows, Общие вопросы
       
      Использование таймера в консольной программе

      Использование WinAPI-функции SetTimer не обязательно требует наличия окна. Можно просто указать адрес процедуры, а затем запустить цикл GetMessage. Чтобы завершить работу приложения, необходимо послать ему сообщение WM_QUIT. Как видите, всё элементарно, и говорить здесь больше не о чем :)

      Хотите пример? Пожалуйста!
      ExpandedWrap disabled
        ; ml /c /coff /Ic:\masm32\include contimer.asm
        ; link /subsystem:console /libpath:c:\masm32\lib contimer.obj
         
        .586P
        .MODEL Flat,StdCall
        OPTION CASEMAP:NONE
         
        INCLUDE     WINDOWS.INC
        INCLUDE     KERNEL32.INC
        INCLUDE     USER32.INC
        INCLUDELIB  KERNEL32.LIB
        INCLUDELIB  USER32.LIB
         
        .DATA
         
        String      db  '.'            ; Строка для вывода
        Counter     db  10             ; Счётчик (кол-во запусков TimerProc)
        lpMsg       MSG <>             ; Буфер для сообщения
        TimerID     dd  ?              ; Идентификатор таймера
        hConOut     dd  ?              ; Дескриптор стандартного вывода
        Result      dd  ?              ; Кол-во записанных байт через WriteConsole
         
        .CODE
         
        ; Процедура, запускаемая по таймеру
        TimerProc   proc    hWnd, uMsg, idEvent, dwTime: DWORD
        ; Выводим в стандартный вывод строку
                invoke  WriteConsole, hConOut, addr String, sizeof String, addr Result, NULL
                dec Counter        ; Уменьшаем счётчик
                jnz @@NoKill
        ; Если счётчик = 0, то удаляем таймер и посылаем WM_QUIT
                invoke  KillTimer, NULL, TimerID
                invoke  PostQuitMessage
        @@NoKill:   ret                    ; Выходим из процедуры
        TimerProc   endp
         
         
        ;----------------------------------------------------------------------------;
        ;                         Начало основной программы                          ;
        ;----------------------------------------------------------------------------;
         
        Start:
         
        ; Получаем дескриптор стандартного вывода и сохраняем его
                invoke  GetStdHandle, STD_OUTPUT_HANDLE
                mov hConOut, eax
        ; Устанавливаем таймер
                invoke  SetTimer, NULL, 0, 200, addr TimerProc
                mov TimerID,eax
        @@Repeat:
        ; Запускаем цикл GetMessage
                invoke  GetMessage, addr lpMsg, NULL, 0, 0
                or  eax,eax
                jz  @@Exit         ; Выходим из цикла, если получено WM_QUIT
                invoke  TranslateMessage, addr lpMsg
                invoke  DispatchMessage, addr lpMsg
                jmp @@Repeat
        @@Exit:
        ; Выходим из программы
                invoke  ExitProcess, NULL
         
        END     Start
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0163 ]   [ 16 queries used ]   [ Generated: 18.04.24, 00:21 GMT ]