IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Завершение процедуры
#$# PaVeL #$#
сообщение 22.01.2006 7:29
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 91
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Как завершить в своей(или чужой) программе процедуру или функцию. Чтоб при этом программа могла дальше продолжать работать, без ошибок!
dry.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 22.01.2006 14:21
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Есть такая команда Exit.
А ты не мог бы поконкретнее, что нужно завершить - это я про чужую программу. Чужой код - потёмки

Сообщение отредактировано: hardcase - 22.01.2006 18:00


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
#$# PaVeL #$#
сообщение 23.01.2006 7:48
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 91
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Есть функция выполняющая какую либо процедуру, или ждущая её завершения а во втором потоке при определённом сообщении надо завершить функцию немедленно!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 24.01.2006 17:33
Сообщение #4


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(#$# 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;

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.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 23.07.2025 1:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"