Что нового

[Ошибки] При использовании RichEdit, если будет ошибка в коде - программа не завершается.

beve

Осваивающий
Сообщения
104
Репутация
31
Как извесно контрол RichEdit имеет некоторые преимущества по сравнению с обычным Edit. У меня вопрос такой: в программе имеется контрол RichEdit, созданный с помощью функции _GUICtrlRichEdit_Create(). Также извесно, что при завершении такой программы обязательно должен быть удален этот контрол с помощью _GUICtrlRichEdit_Destroy() или же просто с использованием Guidelete(), чего не обязательно делать при использовании обычного контрола Edit. И вот представим, что в программе происходит ошибка (чисто теоретически). В результате программа (или же это может быть и не скомпелированный скрипт) не завершается, а висит в процессах и загружает процессор на 100%, и единственный путь его завершения, это через диспетсчер задач (обычно любая программа в результате ошибки завершается без проблем сама).
Подскажите, как придумать, чтобы в результате ошибки программа полностью завершалась (конечно без использования сторонней программы, отслеживающей работу этой программы на предмет появления окна ошибки...)
Вот код для примера (В этом коде специально для наглядности допущена ошибка). На всякий случай ПРЕДУПРЕЖДЕНИЕ, если у вас процессор на компе слабый, то лучше не запускайте этот скрипт.
Код:
#include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hGui = GUICreate("Example", 320, 350, -1, -1)
$hRichEdit = _GUICtrlRichEdit_Create($hGui, "Первая линия", 10, 10, 300, 220, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_AppendText($hRichEdit, @CR & "Вторая линия")
GUISetState()

$iCounter=0
While 1
	$iMsg = GUIGetMsg()
	Select
		Case $iMsg = $GUI_EVENT_CLOSE
		_GUICtrlRichEdit_Destroy($hRichEdit)
			GUIDelete()
			Exit
	EndSelect
	Sleep (50)
	$iCounter+=1
	_GUICtrlRichEdit_AppendText($hRichEdit, @LF&$iCounter)
	if $iCounter=50 then _test()
Wend

func _test()
	if $a then SetError(1)
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
beve
Примерно так. Я с этим столкнулся в скрипте CreationTheme, и чисто проверил, что OnAutoItExitRegister выполняется даже когда скрипт завершается на ошибке.
Код:
OnAutoItExitRegister("Error")

Func Error()
	GUIDelete()
EndFunc


У меня компьютер после первого раза зависал на 50%, после второго раза невозможно было даже диспетчер задач открыть, только удержанием кнопки выключения.
 
Автор
beve

beve

Осваивающий
Сообщения
104
Репутация
31
OnAutoItExitRegister выполняется даже когда скрипт завершается на ошибке
Странно, я же первым делом (вроде) проверял эту функцию и поэтому ее исключил сразу...правда дело было ночью... :-\
Теперь вижу - работает.
Спасибо.
 
Верх