![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
#$# PaVeL #$# |
![]() ![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 91 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Как завершить в своей(или чужой) программе процедуру или функцию. Чтоб при этом программа могла дальше продолжать работать, без ошибок!
![]() |
hardcase |
![]()
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Есть такая команда Exit.
А ты не мог бы поконкретнее, что нужно завершить - это я про чужую программу. Чужой код - потёмки Сообщение отредактировано: hardcase - 22.01.2006 18:00 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
#$# PaVeL #$# |
![]() ![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 91 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Есть функция выполняющая какую либо процедуру, или ждущая её завершения а во втором потоке при определённом сообщении надо завершить функцию немедленно!
|
hardcase |
![]()
Сообщение
#4
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Есть функция выполняющая какую либо процедуру, или ждущая её завершения а во втором потоке при определённом сообщении надо завершить функцию немедленно! Мда. (А ты пробовал читать свои посты?) Т.е. у тебя имеется поток А в котором выполняется вынкция Ц, которая ловит событие, генерируемое потоком Б, и завершает свое выполнение. Я правильно понял? Если так,то есть специальные объекты в ОС для синхронизации потоков - события, мутекся и проч. В Делфи есть такой модуль (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;
begin
Randomize;
Event:=TSimpleEvent.Create;
Event.ResetEvent;
ThreadBEnded:=TSimpleEvent.Create;
ThreadBEnded.ResetEvent;
BeginThread(nil,0,@ThreadA,nil,0,ThreadIDA);
BeginThread(nil,0,@ThreadB,nil,0,ThreadIDB);
ThreadBEnded.WaitFor(INFINITE);
ReadLn;
Event.Free;
ThreadBEnded.Free;
end.
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 1:58 |