Форум: "Система";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
ВнизПодскажите, пожалуйста, как перехватить сообщение о том, что программа выполнила недопустимую операцию и будет закрыта. Найти похожие ветки
← →
y-soft (2001-10-27 18:31) [16]>Alien
За совет относительно матчасти спасибо. Только IMHO все-таки ее лучше не заучивать, а изучать
Привожу маленький пример, демонстрирующий сказанное мной ранее. Понаблюдайте за его поведением в любом внешнем отладчике (можно даже в TaskManager из NT).
program LifeAfterDeath;
{$APPTYPE CONSOLE}
uses
Windows,SysUtils;
var
AddID : Cardinal;
const
PAUSE = 5000;
PRIMARY_EXIT_CODE = 1;
ADDITIONAL_EXIT_CODE = 2;
function AddThreadFunc(Data : pointer) : integer;
begin
Result := ADDITIONAL_EXIT_CODE;
Writeln("The additional thread began work... [#", GetCurrentThreadID,"]");
Sleep(PAUSE * 2);
Writeln("Additional stream together with this process will be finished in 5 seconds...");
Sleep(PAUSE);
//Дополнительный поток завершается обычным образом
end;
begin
Writeln("Primary thread began work...[#",GetCurrentThreadID,"]");
Sleep(PAUSE);
//Запускаем дополнительный поток нерекомендуемым способом
CreateThread(nil,0,@AddThreadFunc,nil,0,AddID);
Sleep(PAUSE);
//Вызываем неожиданное завершение первичного потока
Writeln("Now primary thread will be finished...");
ExitThread(PRIMARY_EXIT_CODE);
end.
Надеюсь, это убедит Вас, что "непринудительно" процесс завершается только после завершения последнего принадлежащего ему потока (даже если это дополнительный поток).
Заблуждение относительно первичного потока идет, очевидно, из руководств по программированию на некоторых языках и вызвано реализацией в них функции первичного потока (как правило в ней производится скрытая инициализация/деинициализация ресурсов и т.п.), т.е. является специфическим свойством языка программирования
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c