Что нового

[Элементы GUI] Задержка при выполнении пункта меню трея

Papazol

Новичок
Сообщения
16
Репутация
1
Фрагмент кода:
Код:
$Pause = 120
While $Pause <> 0
	If TrayGetMsg () = $Exit Then
		Exit
	EndIf
	TrayTip ( "Программа", "Ждём " & $Pause & " секунд.", 1, 1 )
	$Pause -= 1
	Sleep ( 1000 )
	TrayTip ( "Программа", "", 1, 1 )
WEnd

Данный фрагмент выводит в трей оставшееся время каждую секунду. Если выбрать в трей-меню пункт "Выход", то программа должна завершиться. Работает это так: время выводится правильно, но при выборе пункта "Выход" программа закрывется не сразу, а через 15-20 секунд, в течение которых отсчёт времени продолжается. Откуда берётся задержка и как её побороть?
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
выполняется некая функция, вот и задержка. пробуй вывести "выход" в отдельную функцию
Код:
Func _out()
	Switch TrayGetMsg()
		Case $nExit
Exit
	EndSwitch
EndFunc

а функцию зарегистрировать
Код:
AdlibRegister('_out')
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Papazol [?]
но при выборе пункта "Выход" программа закрывется не сразу, а через 15-20 секунд, в течение которых отсчёт времени продолжается. Откуда берётся задержка и как её побороть?
Не надо делать паузу в цикле опроса.
Код:
Opt('TrayMenuMode', 3)

$nExit = TrayCreateItem('Выход')
TraySetState(1)

$iPause = 120
$iStart = TimerInit()
While $iPause
	If TrayGetMsg() = $nExit Then
		Exit
	EndIf
	If TimerDiff($iStart) > 1000 Then
		ToolTip('Ждём ' & $iPause & ' секунд.', 0, 0, 'Программа', 1, 1)
		$iPause -= 1
		$iStart = TimerInit()
	EndIf
WEnd
Exit 1
 
Автор
P

Papazol

Новичок
Сообщения
16
Репутация
1
Предложение madmasles весьма помогло. Гран мерси. :IL_AutoIt_1:
 
Верх