Пауза - как сделать ?

Тема в разделе "WASM.BEGINNERS", создана пользователем Veter, 30 окт 2007.

  1. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Нужно периодически и довольно часто делать паузу в выполнении программы - от 0.1 до 1 сек .
    Смотрел исходники, не совсем понял, вроде есть что-то на эту тему но у меня не заработало...
    Интересно можно ли из call`a сделать call в себя? щас попробую...
    PAUZA proc

    .if Timer
    jmp куда-то
    .else
    call PAUZA
    .endif
    ret

    PAUZA endp

    ринг 3 не такой и безопасный, как написанов умных книжках, вчера по ошибке поставил xor ebx,ebx сразу после .REPEAT и дальше - .UNTIL ebx==8 - с панели инструментов и из окна диспетчера задач всё исчезло , как корова языком слизала...
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    а Sleep не пойдет?
     
  3. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    это только другими словами называется рекурсией.
     
  4. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Слип,который стоит внутри цикла .REPEAT - .UNTIL, выполняется только один раз...почему-то

    А дейтсвительно команды выплняются строго последовательно? Возникло подозрение, что это не так ... Команды, которые стоят сразу за тяжёлой какой-нить функцией - спокойно выполняются, а та ещё всё думает ...
     
  5. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Так, просто загрузка цп, видимо, 100%...завис эксплоер и не отображал какое-то время...
    Если они в одном потоке - то да.
    Это как? ))
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ща сдохну. слип принимает параметр-на скоко тормозить... не подходит слип - используй таймер, тоже довольно мощная штука
     
  7. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Что значит один раз?? Слип выполняется столько, сколько его вызывают!
     
  8. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    сори , но

    Код (Text):
    1. .REPEAT                                          
    2. inc ebx
    3. invoke IsWindowVisible,[hcard +4*ebx]              
    4.                       .if eax >=1                      
    5. invoke MoveWindow,[hcard +4*ebx],xpos,416,71,95,1
    6.  
    7.                   invoke Sleep,40
    8.  
    9. mov eax,xpos
    10. mov dword ptr[xcard +4*ebx],eax
    11. add xpos,20      
    12.     .else
    13.     .endif  
    14.          
    15.                        .UNTIL ebx==12
    В этом цикле - сдвигаются влево карты на столе,расположенные справа от карты, которой сыграли. Написал как смог...Хотел, чтоб было не слишком всё быстро - поестественней, НО слип здесь испольняется ТОЛЬКО 1 РАЗ . Почему ?

    Появилась идея, только что - может он он не может включиться, пока не пройдёт те же 40 миллисекунд с момента окончания паузы? и если цикл выполняется быстрее , то...
     
  9. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    бред. прога выполняется, доходет до слип, ждет 40мс(на самом деле может ждать и больше), идет дальше....
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Veter
    Sleep для анимации конечно хорошо. Но гладкую анимацию фиг получишь.
    Более правильно гонять цикл, в котором проверять тики прошедшие от предыдущего кадра анимации, тем самым не будет отдаваться квант времени другим приложениям, и будет гладко. Единственно, что окна ворочать в таком цикле - жесть.
     
  11. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    не знаю, может и бред - но слип исполняется ТОЛЬКО ОДИН РАЗ !!!! - для первой карты, которую надо сдвинуть, все остальные- сдвигаются как обычно, без задержки - КЛЯНУСЬ!!!!!!
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Veter
    Я тоже думаю, что бред. Все они сдвигаются с задержкой в ~40 мсек. Вот только Вы этого не видите. Т.к. на самом деле сначала все это дело сдвигается, а потом уже прорисовывается, поэтому у Вас и создается впечатление, что задержка только перед первой картой. Поставьте после Sleep какой-нибудь invalidate или SendMessage (c WM_PAINT) или UpdateWindow и тогда будет видна задержка для каждой карты.
     
  13. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    дошел до инвалидэйт в своих изысканиях - не помогло.. попробую апдейт каждого окна, которое сдвигается в этом цикле - карты это же окна ... вроде ничего больше не придумаешь.. Что-то многовато переменных образовалось - хэндл, положение по х и у, номер, масть, и ещё несколько ... короче, 9 х 52 переменных, не считая всех остальных...Если не делать дестрой всего этого хозяйства после каждой сдачи, начинаются глюки...
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Veter
    Первый раз вижу чтобы такое окнами делали -)
    Хотя может для висты и приемлимо, если там окна аппаратным DirectX рисуются.
    Но вообще пипец.
     
  15. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Всё что мы видим в клиентской области - это окна . Не рисовать же - ведь по ходу дела нужно прятать, показывать. перемещать отдльные карты и как это можно сделать? в виндовской библиотеке не смог разобраться , есть исходник на с , надо ещё посмотреть. Но там карты получаются не очень .. так себе .
    Я просто взял бмп-буттон, немного её переделал. и вроде нормально.
    По сравнению с известными карточными программами - проц грузится в два- три раза меньше - больше всего, когда создаётся новая сдача.... и всё работает очень быстро - даже слишком... вот в чём проблема...

    Самое печальное - если использовать карты винды, программа получается меньше 10 кило. 98% лопоухих юзеров считает, что их
    пытаются обдурить. когда предлагают скачать ( а тем более купить - в перспективе) мааленькую программу...
     
  16. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Почти сделал интерфейс как-бы . Если кто хочет - посмотрите, скажите, плиз как у вас смотрится . Проблема- мониторы разнЫе, разрешение все ставят разное, но карты- стандартные и теоретически - разрешение должно соответствовать размеру экрана - для 17 дюймов - 1000 на 800, но разве щас найдёшь нормального юзера - все же стараются вы-нуться и ковыряются в мелочи, портят глаза..
     
  17. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Veter
    Ну ты даёшь, слов нет.
    Не надо делать через Ж... и всё будет нормально, посмотри как сделаны карты в виндах, и делай также. Почитай про программирование графики в Win, и всё будет ок.
    Насчёт того как сделать отображение, перемещение, исчезновение карт: В ООП это делается с помощью объектов, в процедурных языках соответственно процедурами, но тоже используя принципы ООП. Типо есть "объект" - структура карты. Создаёшь экземпляр карты. Делаешь функцию ShowCard c параметрами: указатель на карту, позиция карты, флаг видимости карты и т.д. Собственно сама винда на таких принципах построена.
    И желательно имет возможность расширять структуру карты, без сильной модификации других функций.
     
  19. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Согласен...

    И в тоже время - я ещё маленький и инстиктивно стараюсь делать не так, как все. Это вполне нормальный инстинкт, который является залогом прогресса сообщества ...Если получится плохо - можно сделать как обычно, но иногда получается лучше, со всеми вытекающими последствиями...

    Теперь что мне делать? - всё работает преотлично, особых трудностей в реализации нет, не считая замороченой логики...но она так и останется замороченой, применяю я объектно-ориентированную модель или нет... Затереть проект и начать узучать километровые портянки ?