|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Режимы MessageLoop и OnEvent Mode |
|
|
[решено] Режимы MessageLoop и OnEvent Mode
|
Ветеран Сообщения: 903 |
Профиль | Отправить PM | Цитировать Вопрос в различии между этими 2-мя режимами и их применением в ситуации, когда форма содержит Tab с вкладками и кнопками на каждой из них, а также общие кнопки для всей формы.
Изучил справку по этим 2-м режимам (rus). Но остался ряд вопросов: 1. OnEvent Mode прерывает выполнение скрипта на время выполнения события. В справке нет ответа как действует в этом случае MessageLoop? 2. Не совсем понятна фраза справки: "Обработка сообщений в режиме опроса требует обеспечения высокой скорости чтения вызовом GUIGetMsg и последующей обработки полученных сообщений. Иначе не все события будут обработаны." Что означает "высокой скорости чтения вызовом GUIGetMsg"? Значит ли это, что машина со старым процессором может отработать скрипт неполностью (особенно если в цикле много case)? 3. В справке указано, что MessageLoop, не смотря на цикл, не грузит процессор. Насколько я понял, OnEvent Mode, не является циклическим процессом и срабатывает только при активации пользователем. Логично предположить, что он также не грузит процессор. Я прав? 4. Для меня осталось не совсем понятно, в чем принципиальное отличие этих 2-х режимов? Они выполняют одну и туже функцию, без особой нагрузки на процессор... Какой режим когда лучше, в таком случае, применять? Какой из них менее ресурсоемкий и более надежный? 5. Если брать мой частный случай, то меня конкретно интересует следующее: если гуи-форма содержит много кнопок на разных вкладках + общие кнопки, то как будет лучше действовать: - использовать вариант MessageLoop - для общих кнопок, а вариант OnEvent Mode - для кнопок на конкретной вкладке - лучше использовать только вариант MessageLoop - лучше использовать только вариант OnEvent Mode - все равно Если можно, прокомментируйте свои ответы (особенно на вопрос #5). Заранее благодарю за помощь. |
|
Отправлено: 01:24, 18-08-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Немного по теме: http://autoit-script.ru/index.php/topic,459.0.html
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
Цитата saavaage:
|
|||||||||
------- Отправлено: 02:55, 18-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать Creat0R, спасибо за развернутый ответ. Есть еще один вопрос по форме с вкладками: как сделать так, чтобы скрипты, находящиеся в привязке к определенной вкладке Tab, отрабатывали только тогда, когда я перехожу на эту вкладку (делаю ее активной), а не при загрузке всей формы. Просто, при большом количестве вкладок и скриптов, вся прога грузится довольно долго, пока не обработаются все скрипты вкладок.
Спасибо |
------- Последний раз редактировалось saavaage, 18-08-2010 в 11:54. Отправлено: 11:20, 18-08-2010 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата saavaage:
|
|
------- Отправлено: 17:32, 18-08-2010 | #4 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать Creat0R, так и сделаю
|
|
------- Отправлено: 20:27, 18-08-2010 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата saavaage:
|
|
------- Отправлено: 20:30, 18-08-2010 | #6 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать Creat0R, так точно, сэр :-). Закрываю.
|
------- Последний раз редактировалось saavaage, 18-08-2010 в 21:27. Отправлено: 20:34, 18-08-2010 | #7 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать Creat0R, извините, но обнаружил на русском форуме Autoit Ваше высказывание на тему MessageLoop vs OnEvent Mode:
пост http://autoit-script.ru/index.php/topic,459.0.html цитата: "Это всё зависит от поставленной задачи. Иногда лучше использовать MessageLoop (например если некие элементы вызывают дочернее окно которое также требует обработку событий), а иногда лучше OnEvent. " Оно противоречит Вашему ответу в текущем посте: Цитата Creat0R:
выпадающий список (combo), внесение твика в реестр (прописывание в автозагрузке), кнопка сохранения и закрытия и для меня очень важно сразу определиться какой режим лучше использовать, чтобы потом не переделывать скрипт. Спасибо |
|
------- Последний раз редактировалось saavaage, 21-08-2010 в 02:32. Отправлено: 01:16, 21-08-2010 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата saavaage:
Цитата saavaage:
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #Region Main GUI $hMain_GUI = GUICreate("My Program", 500, 300) $nMain_Exit_Button = GUICtrlCreateButton("Exit", 20, 270, 60, 20) $nMain_Settings_Button = GUICtrlCreateButton("Settings", 90, 270, 60, 20) GUISetState(@SW_SHOW, $hMain_GUI) #EndRegion Main GUI #Region Settings GUI $hSettings_GUI = GUICreate("Settings", 400, 250, -1, -1, -1, -1, $hMain_GUI) $nStngs_Close_Button = GUICtrlCreateButton("Close", 20, 220, 60, 20) $nStngs_Save_Button = GUICtrlCreateButton("Save", 90, 220, 60, 20) #EndRegion Settings GUI While 1 $nMsg = GUIGetMsg(1) Switch $nMsg[0] Case $GUI_EVENT_CLOSE, $nStngs_Close_Button, $nMain_Exit_Button If $nMsg[1] = $hSettings_GUI Then GUISetState(@SW_ENABLE, $hMain_GUI) GUISetState(@SW_HIDE, $hSettings_GUI) Else Exit EndIf Case $nMain_Settings_Button GUISetState(@SW_DISABLE, $hMain_GUI) GUISetState(@SW_SHOW, $hSettings_GUI) Case $nStngs_Save_Button MsgBox(64, 'Title', 'Settings saved!', 0, $hSettings_GUI) EndSwitch WEnd #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) #Region Main GUI $hMain_GUI = GUICreate("My Program", 500, 300) $nMain_Exit_Button = GUICtrlCreateButton("Exit", 20, 270, 60, 20) $nMain_Settings_Button = GUICtrlCreateButton("Settings", 90, 270, 60, 20) GUICtrlSetOnEvent($nMain_Exit_Button, "_MainGUI_Events") GUICtrlSetOnEvent($nMain_Settings_Button, "_MainGUI_Events") GUISetOnEvent($GUI_EVENT_CLOSE, "_MainGUI_Events", $hMain_GUI) GUISetState(@SW_SHOW, $hMain_GUI) #EndRegion Main GUI #Region Settings GUI $hSettings_GUI = GUICreate("Settings", 400, 250, -1, -1, -1, -1, $hMain_GUI) $nStngs_Close_Button = GUICtrlCreateButton("Close", 20, 220, 60, 20) $nStngs_Save_Button = GUICtrlCreateButton("Save", 90, 220, 60, 20) GUICtrlSetOnEvent($nStngs_Close_Button, "_SettingsGUI_Events") GUICtrlSetOnEvent($nStngs_Save_Button, "_SettingsGUI_Events") GUISetOnEvent($GUI_EVENT_CLOSE, "_SettingsGUI_Events", $hSettings_GUI) #EndRegion Settings GUI While 1 Sleep(100) WEnd Func _MainGUI_Events() Switch @GUI_CtrlId Case $GUI_EVENT_CLOSE, $nMain_Exit_Button Exit Case $nMain_Settings_Button GUISetState(@SW_DISABLE, $hMain_GUI) GUISetState(@SW_SHOW, $hSettings_GUI) EndSwitch EndFunc Func _SettingsGUI_Events() Switch @GUI_CtrlId Case $GUI_EVENT_CLOSE, $nStngs_Close_Button GUISetState(@SW_ENABLE, $hMain_GUI) GUISetState(@SW_HIDE, $hSettings_GUI) Case $nStngs_Save_Button MsgBox(64, 'Title', 'Settings saved!', 0, $hSettings_GUI) EndSwitch EndFunc Выбирай |
||
------- Отправлено: 04:36, 21-08-2010 | #9 |
Ветеран Сообщения: 903
|
Профиль | Отправить PM | Цитировать Creat0R, большое спасибо (особенно за 3 вариант)
PS противоречие было в том, что в первой цитате Вы рекомендовали использовать MessageLoop с дочерними окнами, а во-второй, наоборот, если нет дочерних окон. Не заглянете в тему http://forum.oszone.net/thread-182740.html ? Там у нас небольшая проблема возникла с ограничением вывода инфо в ListViewItem |
------- Отправлено: 04:47, 21-08-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2010 - Режимы отображения документа Word 2010 | OSZone | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 18-03-2010 01:30 | |
Службы - Как в висте запустить именно ждущий, а не спящий и др. режимы? | Hammer.888 | Microsoft Windows Vista | 4 | 09-01-2010 09:16 | |
Драйвер - Как поменять настройки дисплея для normal mode из save mode? | aeren | Microsoft Windows Vista | 6 | 03-07-2009 11:46 | |
Интерфейс - [решено] Ярлык для перехода в режимы сна в Vista x64 SP2 | BBeard | Microsoft Windows Vista | 5 | 29-06-2009 11:42 | |
Приобретение - Режимы лицензирования. | __sa__nya | Лицензирование продуктов Microsoft | 1 | 24-08-2008 09:45 |
|