Форум: "Основная";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с завершением потока. Найти похожие ветки
← →
dracula © (2005-12-15 15:30) [0]Мне надо при завершении потока execute.OnTerminate присвоить status : boolean значение false но я незнаю как это сделать
Создаю поток
execute := copier.Create(false);
Делаю процедуру
execute.Priority := tpLowest;
execute.OnTerminate := ThreadTerminated;
private
procedure ThreadTerminated(Sender: TObject);
procedure ThreadTerminated(Sender: TObject);
begin
status := false;
end;
Ну и нифига невыходит, как мне это правильно сдлать?
Заранее спасибо.
← →
clickmaker © (2005-12-15 15:37) [1]в отладчике посмотри
← →
Digitman © (2005-12-15 15:40) [2]
> нифига невыходит
чтобы что-то вышло, надо чтобы это самое "что-то" сначала вошло)
а оно не входит хотя бы по той причине , что в твоем коде ThreadTerminated() с какого-то перепугу описана как рег.процедура, а не как метод класса
← →
dracula © (2005-12-15 15:50) [3]Я понял, что делаю неправильно, поэтому и прошу помощи. Можно маленький примерчик.
← →
Digitman © (2005-12-15 15:56) [4]
> dracula © (15.12.05 15:50) [3]
разницу между регулярной процедурой и процедурным методом класса понимаешь ?
← →
dracula © (2005-12-15 15:58) [5]ну допустим я представляю что это, может несовсем точно, но...
← →
Digitman © (2005-12-15 16:18) [6]
> dracula © (15.12.05 15:58) [5]
> допустим я представляю
тогда рассказывай, как ты себе это представляешь ..
а мы подправим, если что не так ..
← →
dracula © (2005-12-15 16:24) [7]Ну ладно хватит издеватся, лучше делом помоги. Мне хоть какой пример, дальше я сам разберусь. Просто первый раз с таким делом столкнулся, а как сделать пока незнаю, один раз увидеть и хоть знать на потом буду что к чему, и не буду глупых вопросов задавать.
← →
Digitman © (2005-12-15 16:26) [8]
> хватит издеватся
а ты, надо понимать, не издеваешься ?
> нифига невыходит
?
ляпнул и сидишь в потолок поплевываешь, телепатов ждешь ) ...
← →
dracula © (2005-12-15 16:29) [9]Нафига отвечать тогда, если только и можешь что под....вать.
← →
umbra © (2005-12-15 16:31) [10]2 dracula © (15.12.05 16:29) [9]
если бы Вы ответили на заданный вопрос, то сами бы поняли, где у Вас ошибка
← →
Digitman © (2005-12-15 16:32) [11]
> Нафига
если ты в результате чуть-чуть научишься думать самостоятельно, то, считай, я день прожил не зря)
← →
dracula © (2005-12-15 16:43) [12]Я могу разобратся самостоятельно, но у меня на это уйдёт много времени (точнее уже ушло), а на простом примере я разобрался бы намного быстрее. Ладно продолжу поиски самостоятельно, извини если обидел чем. Спасибо за помощь - хоть и небольшую, но всётаки =)
← →
dracula © (2005-12-20 13:18) [13]Так и не получилось у меня разобраться с OnTerminate, Во всех примерах которые я находил всё строится таким образом как в коде ниже, но у меня компилятор выдаёт ошибку, что несовместимые типы и т.д. ...
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TPrimeFrm = class(TForm)
NumEdit: TEdit;
SpawnButton: TButton;
ResultsMemo: TMemo;
procedure SpawnButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
FThreadRefCount: integer;
procedure HandleTerminate(Sender: TObject);
public
{ Public declarations }
end;
var
PrimeFrm: TPrimeFrm;
implementation
uses PrimeThread;
{$R *.DFM}
procedure TPrimeFrm.SpawnButtonClick(Sender: TObject);
var
NewThread: TPrimeThrd;
begin
NewThread := TPrimeThrd.Create(True);
NewThread.FreeOnTerminate := True;
try
with NewThread do
begin
TestNumber := StrToInt(NumEdit.Text);
Inc(FThreadRefCount);
OnTerminate := HandleTerminate;
Resume;
end;
except on EConvertError do
begin
NewThread.Free;
ShowMessage("That is not a valid number!");
end;
end;
end;
procedure TPrimeFrm.FormCreate(Sender: TObject);
begin
FThreadRefCount := 0;
end;
procedure TPrimeFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := true;
if FThreadRefCount > 0 then
begin
if MessageDlg("Threads active. Do you still want to quit?",
mtWarning, [mbYes, mbNo], 0) = mrNo then
CanClose := false;
end;
end;
procedure TPrimeFrm.HandleTerminate(Sender: TObject);
begin
Dec(FThreadRefCount);
end;
end.
В учебниках которые я просмотрел, авторы обходят этот вопрос стороной, и в итоге мне всётаки нужна помощь. Как при завершении потока присвоить переменной true.
← →
Leonid Troyanovsky © (2005-12-20 13:37) [14]
> dracula © (20.12.05 13:18) [13]
> Так и не получилось у меня разобраться с OnTerminate, Во
%delphi%\demos\threads\thrdDemo.dpr
--
Regards, LVT.
← →
Alexander Panov © (2005-12-20 15:30) [15]dracula © (20.12.05 13:18) [13]
Вот так прекрасно все работает:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTestThread=class(TThread)
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
public
procedure ThreadTerminate(Sender: TObject);
end;
var
Form1: TForm1;
F: TForm;
Counter: Integer;
implementation
{$R *.dfm}
procedure TForm1.ThreadTerminate(Sender: TObject);
begin
Dec(Counter);
Memo1.Lines.Add(IntToStr(Counter));
end;
{ TTestThread }
procedure TTestThread.Execute;
begin
Sleep(1000);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TTestThread.Create(True) do
begin
FreeOnTerminate := True;
OnTerminate := ThreadTerminate;
Inc(Counter);
Memo1.Lines.Add(IntToStr(Counter));
Resume;
end;
end;
end.
А у тебя, похоже, ошибка в поточной процедуре. В ней возникает Exception и поток аварийно завершается.
← →
dracula © (2005-12-20 16:32) [16]Incompatible types: "method pointer and regular procedure"
Выдаёт вот такую ошибку. Вроде делаю всё также, но...
>Alexander Panov твой код работает, а мой нехочет =(
У меня поток реализован в отдельном юните,
Допустим при нажатии на кнопку я создаю потокexecute := copier.Create(false);
execute.Priority := tpLowest;
execute.OnTerminate := ThreadTerminate;</CODE> выдаёт ошибку при компиляции, ошибка вверху.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.035 c