Автор Тема: [Элементы GUI] MessageLoop vs OnEvent  (Прочитано 5436 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854
  • Репутация: 222
  • Пол: Мужской
    • Награды
[Элементы GUI] MessageLoop vs OnEvent
« Создано: Октябрь 25, 2009, 13:57:36 »
Подскажите, пожалуйста, является ли режим GUI OnEvent универсальным с точки зрения функциональности?
Если я правильно понял, то режим MessageLoop используют только с целью упрощения скриптов?
Главное в жизни человека - это отношение...

Русское сообщество AutoIt

[Элементы GUI] MessageLoop vs OnEvent
« Отправлен: Октябрь 25, 2009, 13:57:36 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #1, Отправлен: Октябрь 25, 2009, 14:30:11 »
Это всё зависит от поставленной задачи. Иногда лучше использовать MessageLoop (например если некие элементы вызывают дочернее окно которое также требует обработку событий), а иногда лучше OnEvent. Хотя если граммотно составить обработку, то оба способа можно использовать как универсальные :).


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854

  • Автор темы
  • Репутация: 222
  • Пол: Мужской
    • Награды
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #2, Отправлен: Октябрь 25, 2009, 14:40:10 »
CreatoR
Я замечал, что некоторые специфические манипуляции (к примеру, реакция на выбор из списка комбобокса) выполняются только в режиме OnEvent, поэтому усомнился в функциональности MessageLoop...
Так ли это?

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #3, Отправлен: Октябрь 25, 2009, 14:43:48 »
Лично я OnEvent использовал всего один раз, и мне не понравилось. :)


Думай, прежде чем говорить.

Русское сообщество AutoIt

Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #3 Отправлен: Октябрь 25, 2009, 14:43:48 »

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854

  • Автор темы
  • Репутация: 222
  • Пол: Мужской
    • Награды
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #4, Отправлен: Октябрь 25, 2009, 14:51:25 »
Yashied
А я, наоборот, собирался пожертвовать простотой во имя функциональности...
Я думаю, если привыкнуть к режиму OnEvent, то он не будет казаться таким уж сложным, был бы резон...
Поэтому решил создать данную тему, чтобы услышать мнения других скриптеров...

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #5, Отправлен: Октябрь 25, 2009, 15:00:50 »
snoitaleR [?]
Цитировать
Так ли это?
Да.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #6, Отправлен: Октябрь 25, 2009, 15:09:35 »
Он вовсе не сложный, скорее наоборот. Вся сложность заключается в том, что при некоторых задачах тебе придется контролировать моменты прихода событий от GUI, в то врямя, как в цикле это можно легко предусмотреть последовательностью действий. Например:

Код: AutoIt [Выделить]
While 1
    $Msg = GUIGetMsg()
   
    ...
   
WEnd


В этом случае события "приходят" строго в определенном месте программы. Во многих ситуациях это жизненно необходимо. А в OnEvent режиме прерывание может прийти в любом месте цикла, и тебе придется это учитывать. Мой совет - используй OnEvent только там где это действительно необходимо (сам поймешь когда это понадобится). По умолчанию работай с циклом.

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854

  • Автор темы
  • Репутация: 222
  • Пол: Мужской
    • Награды
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #7, Отправлен: Октябрь 25, 2009, 15:13:49 »
И последний, наверное, вопрос:
все-таки, можно ли реализовать реакцию на выбор из списка комбобокса в режиме MessageLoop? Не обязательно пример, хотя бы идею...

Русское сообщество AutoIt

Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #7 Отправлен: Октябрь 25, 2009, 15:13:49 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #8, Отправлен: Октябрь 25, 2009, 15:15:57 »
CreatoR
Я замечал, что некоторые специфические манипуляции (к примеру, реакция на выбор из списка комбобокса) выполняются только в режиме OnEvent, поэтому усомнился в функциональности MessageLoop...
Так ли это?

Код: AutoIt [Выделить]
#Include <GUIConstantsEx.au3>

GUICreate('MyGUI', 300, 200)
$Combo = GUICtrlCreateCombo('', 10, 10, 280, 21)
GUICtrlSetData(-1, 'Item1|item2|Item3', 'item1')
GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Combo
            MsgBox(0, 'Combo Event', GUICtrlRead($Combo))
    EndSwitch
WEnd
 


?

Оффлайн snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 854

  • Автор темы
  • Репутация: 222
  • Пол: Мужской
    • Награды
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #9, Отправлен: Октябрь 25, 2009, 15:37:44 »
CreatoR, Yashied
Спасибо за помощь...
Теперь я гораздо лучше представляю, как выбирать режим GUI...

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2706
  • Репутация: 1136
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #10, Отправлен: Ноябрь 12, 2011, 21:31:24 »
При использовании некоторых WM-сообщений заметил, что когда мышь проходит над интерфейсом программы счётчик событий ускоряется в 10 раз. Почему то я решил что режим OnEvent является нативным и имеет тот же принцип - замедлять скорость опроса событий от Gui, если к примеру программа свёрнута, неактивна или мышь не двигается.
Кто нибуть в курсе? Я многие утилиты, которые писал тотально переводил на режим OnEvent, учитывая что количество опрашиваемых элементов интерфейса постоянно увеличивается.

Русское сообщество AutoIt

Re: [Элементы GUI] MessageLoop vs OnEvent
« Ответ #10 Отправлен: Ноябрь 12, 2011, 21:31:24 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
4937 Просмотров
Последний ответ Август 16, 2010, 20:53:06
от XpycT
2 Ответов
2242 Просмотров
Последний ответ Апрель 02, 2011, 22:24:21
от tigerby
1 Ответов
1950 Просмотров
Последний ответ Апрель 22, 2011, 09:35:47
от madmasles
4 Ответов
3846 Просмотров
Последний ответ Август 26, 2011, 00:24:48
от erlik
3 Ответов
2512 Просмотров
Последний ответ Сентябрь 18, 2011, 15:25:23
от CreatoR
5 Ответов
2664 Просмотров
Последний ответ Февраль 06, 2012, 21:03:05
от DarWiM
6 Ответов
3341 Просмотров
Последний ответ Февраль 27, 2012, 23:49:31
от Robocop
8 Ответов
3825 Просмотров
Последний ответ Март 10, 2012, 04:10:33
от Kaster
1 Ответов
2240 Просмотров
Последний ответ Май 24, 2012, 20:08:39
от teges
40 Ответов
2430 Просмотров
Последний ответ Январь 21, 2017, 17:08:30
от VadimKHL