about Thread Suspend/Resume...
2 отговора
100 прегледа
about Thread Suspend/Resume...
Някои може ли да каже къде греша в използването на Suspend/Resume
Имам следеният клас:
ТMyTread = class(TThread)
...
constructor Create;override;
procedure Execute; override;
...
procedure DoSth;
procedure DisplayData;
data : TData;
...
end;
procedure TMyThread.Execue;
begin
if Terminated then Exit;
DoSth;
end;
procedure TMyThread.DoSth;
begin
...
...
Synchronize(DisplayData)
end;
procedurre DysplayData
begin
// тук update-wam някои визуални компоненти
form1.memo:=//Data;
i t.n.
// Thread.Suspend;
end;
Така го викам:
procedure TForm1.Button1Click(Sender: TObject)
begin
thread:=TThread.create;
end;
Та всичко е ок, докато не почнах да използвам Suspend/Resume...
procedure TForm1.Button2Click
begin
Thread.Resume;
end;
Мисля че правя всичко правилно, но като изплзвам Suspend/Resume...
визуалните компоненти не се ъпдейтнати(изрисувани), не съм сигурен точно какъв е термина...
Имам следеният клас:
ТMyTread = class(TThread)
...
constructor Create;override;
procedure Execute; override;
...
procedure DoSth;
procedure DisplayData;
data : TData;
...
end;
procedure TMyThread.Execue;
begin
if Terminated then Exit;
DoSth;
end;
procedure TMyThread.DoSth;
begin
...
...
Synchronize(DisplayData)
end;
procedurre DysplayData
begin
// тук update-wam някои визуални компоненти
form1.memo:=//Data;
i t.n.
// Thread.Suspend;
end;
Така го викам:
procedure TForm1.Button1Click(Sender: TObject)
begin
thread:=TThread.create;
end;
Та всичко е ок, докато не почнах да използвам Suspend/Resume...
procedure TForm1.Button2Click
begin
Thread.Resume;
end;
Мисля че правя всичко правилно, но като изплзвам Suspend/Resume...
визуалните компоненти не се ъпдейтнати(изрисувани), не съм сигурен точно какъв е термина...
Re: about Thread Suspend/Resume...
Нещо не разбирам логиката на задачата - защо искаш да направиш Suspend в края на нишката ??? ако въобще е точно така. Не го викай в DisplayData - не знам какво точно се слу4ва там - но не мисля, че е хубаво - заради Synchornize -а.
Реално кода който се изпълнява в Execute - обикновено е цикъл (достатъчно дълъг като времетраене) и Suspend и Resume се извикват от външен процес - не че е невъзможно да се извикат и от самата нишка - но нещо ми се губи логиката.
Дай повече инфо - ако можеш.
---
Е т'ва е живот!
Реално кода който се изпълнява в Execute - обикновено е цикъл (достатъчно дълъг като времетраене) и Suspend и Resume се извикват от външен процес - не че е невъзможно да се извикат и от самата нишка - но нещо ми се губи логиката.
Дай повече инфо - ако можеш.
---
Е т'ва е живот!
Re: about Thread Suspend/Resume...
Идеята е да след ТОЧНО като се е изпълнил един цикъл в DoSth, треда да спре и да изчака някакви нови данни, въведени от потребителя, и тогава пак да продължи... Как да го спра "отвън", след като не знам дали е свършил точно един цикъл?
Затова го спирам след поредният "цикъл".
Интересното е, че ако не го спирам, а го оставя след всеки цикъл да си update-не данните в мемото, няма проблеми, но като го спра и пусна.
Май не се изразих много правилно, ама... сори.
Задачата е следната:
for i:=0 to 10 do begin
DoSth(I);
end;
procedure DoSth(i: integer);
begin
..някакви изчисления
DisplayData; //Tuk go spiram i chakam nqkoi da go resumne.
end;
Сигурно нещо в дизайна ми кица, но не знам какво...
Затова го спирам след поредният "цикъл".
Интересното е, че ако не го спирам, а го оставя след всеки цикъл да си update-не данните в мемото, няма проблеми, но като го спра и пусна.
Май не се изразих много правилно, ама... сори.
Задачата е следната:
for i:=0 to 10 do begin
DoSth(I);
end;
procedure DoSth(i: integer);
begin
..някакви изчисления
DisplayData; //Tuk go spiram i chakam nqkoi da go resumne.
end;
Сигурно нещо в дизайна ми кица, но не знам какво...