Как завершить в своей(или чужой) программе процедуру или функцию. Чтоб при этом программа могла дальше продолжать работать, без ошибок!
hardcase
22.01.2006 14:21
Есть такая команда Exit. А ты не мог бы поконкретнее, что нужно завершить - это я про чужую программу. Чужой код - потёмки
#$# PaVeL #$#
23.01.2006 7:48
Есть функция выполняющая какую либо процедуру, или ждущая её завершения а во втором потоке при определённом сообщении надо завершить функцию немедленно!
hardcase
24.01.2006 17:33
Цитата(#$# PaVeL #$# @ 23.01.2006 7:48)
Есть функция выполняющая какую либо процедуру, или ждущая её завершения а во втором потоке при определённом сообщении надо завершить функцию немедленно!
Мда. (А ты пробовал читать свои посты?) Т.е. у тебя имеется поток А в котором выполняется вынкция Ц, которая ловит событие, генерируемое потоком Б, и завершает свое выполнение. Я правильно понял?
Если так,то есть специальные объекты в ОС для синхронизации потоков - события, мутекся и проч. В Делфи есть такой модуль (SyncObjs кажется) - в нём какраз реализуеться интерфейс к этим АПИ.
Вот пример синхронизации:
program Project1;
{$APPTYPE CONSOLE}
uses Windows, SysUtils, Classes, SyncObjs;
var ThreadBEnded: TSimpleEvent; Event: TSimpleEvent; ThreadIDA, ThreadIDB: cardinal;
function ThreadA(Param: pointer): cardinal; begin Sleep(Random(5000)); //do something WriteLn('from A: signaled'); Event.SetEvent; // spawn signal! Event.ResetEvent; Result:=0; end;
function ThreadB(Param: pointer): cardinal; begin if Event.WaitFor(2500) = wrSignaled then begin WriteLn('from B: signal catched'); end else begin WriteLn('from B: timeouted'); end; Result:=0; ThreadBEnded.SetEvent; ThreadBEnded.ResetEvent; end;