Зациклить windows приложение

Тема в разделе "WASM.BEGINNERS", создана пользователем Duke, 26 окт 2005.

  1. Duke

    Duke New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2005
    Сообщения:
    4
    Здравствуйте!

    Написал программу, которая отслеживает изменение размера файла (нужны и такие) и сообщает об этом.

    Чтобы программа все время работала в цикле использовал функию WaitMessage

    В Delphi все работало, почему не работает в асме?

    текст такой:



    Delphi

    repeat

    WaitMessage

    until True;



    Asm

    @@repeat:

    call WaitMessage

    jmp @@repeat
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вообще-то нужно так:
    Код (Text):
    1.  
    2. @@:
    3.   call  WaitMessage
    4.   test  eax,eax
    5.   jnz   @B
     
  3. Duke

    Duke New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2005
    Сообщения:
    4
    Угу, лишь в том случае, когда нужно обрабатывать эти сообщения.
     
  4. Anton_K

    Anton_K New Member

    Публикаций:
    0
    Регистрация:
    18 май 2005
    Сообщения:
    9
    Адрес:
    Germany


    Тут WaitMessage вообще-то вызовется только один раз.
     
  5. Duke

    Duke New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2005
    Сообщения:
    4
    Из MSHelp

    The WaitMessage function yields control to other threads when a thread has no other messages in its message queue. The WaitMessage function suspends the thread and does not return until a new message is placed in the thread's message queue.

    из чего следует, что программа не выполняется дальше, пока не поступит сообщение.

    а цикл repeat until true выполняется бесконечное число раз
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348




    Если мне память не изменяет, бесконечное число раз выполняется repeat until false
     
  7. Anton_K

    Anton_K New Member

    Публикаций:
    0
    Регистрация:
    18 май 2005
    Сообщения:
    9
    Адрес:
    Germany


    Совершенно верно, а repeat until true выполняется только один раз.
     
  8. Duke

    Duke New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2005
    Сообщения:
    4
    Да, про until true вы правы, прошу прощения.

    Ввело меня в заблуждение то, что WaitMessage не возвращал управление программе, и цикл не прерывался.

    Что ж, я решил задачу, если кому интересно, так:

    @@repeat:

    call WaitMessage

    push PM_REMOVE

    push NULL

    push NULL

    push NULL

    lea ax, msg

    push ax

    call PeekMessage

    jmp @@repeat



    , где msg - структура, содержащая информацию о сообщении из очереди. Хотя, возможно, есть более изящные методы.