Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2018, 15:57   #1
DarkEvolution
Новичок
Джуниор
 
Регистрация: 22.07.2018
Сообщений: 2
По умолчанию Потоки - как сделать так чтоб при остановке процедуры в сторонней программе поток завершался в моей программе ?

есть программа созданная через делфи 2010 с компиляцией в dll файл, dll используется используется в другой программе которая открывает интерфейс созданной программы через делфи по нажатии на кнопку в интерфейсе выполняется определенная процедура в сторонней программе и чтоб окно интерфейса не зависала при выполнении этой процедуры был введен поток все работает и программа не зависает процедура выполняется, но если произвести остановку сторонней программой процедуры до завершения выполнения этой процедуры (процедура выполняется сек 30) если остановить выполнение на 10 сек то сторонию программу критует как сделать так чтоб при остановке процедуры в сторонней программе поток завершался в моей программе ?

код моей программы
Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;



type
TForm1 = class(TForm)
btn5: TButton;
CheckBox1: TCheckBox;
Button1: TButton;
Timer1: TTimer;
procedure btn5Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);

private
fRestore: Boolean;
public
end;





//Здесь необходимо описать класс TMyThread:
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;





var
Form1: TForm1;
MyThread: TMyThread;
_PluginProc: function(Code: Cardinal; p1, p2, p3: widestring): widestring; stdcall;
implementation



{$R *.dfm}



function PluginProc(Code: Cardinal; p1: widestring = ''; p2: widestring = ''; p3: widestring = ''): widestring;
begin
Result := _PluginProc(Code, p1, p2, p3);

end;




///поток
procedure TMyThread.Execute();
begin
while 1<>2 do begin
PluginProc(0);
sleep(6000) ;
end;
end;


///кнопка закрытия окна
procedure TForm1.btn5Click;
begin
Close;
end;


//// чекбох
procedure TForm1.Button1Click(Sender: TObject);
begin
if CheckBox1.Checked then
//Вначале нужно создать экземпляр потока:
MyThread:=TMyThread.Create(False);
//Параметр False запускает поток сразу после создания, True - запуск впоследствии , методом Resume
//Далее можно указать параметры потока, например приоритет:
MyThread.Priority:=tpNormal;

end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

Action := caNone;
Hide;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin

end;

///по верх всех окон
procedure TForm1.Timer1Timer(Sender: TObject);
begin
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE)
end;

end.
DarkEvolution вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать так, чтоб при открытии формы она считывала информацию из строки Kizim Microsoft Office Excel 2 27.07.2017 13:03
При протягивании значений, как сделать так чтоб временно не срабатывала процедура Worksheet_SelectionChange? RISagitov Microsoft Office Excel 9 20.10.2015 13:10
как сделать так чтоб моя прога при запуске о.с. стартовала steck Общие вопросы Delphi 11 03.04.2007 20:10