PDA

Просмотр полной версии : [Delphi]. Вопрос по потокам.


f0rward
23.05.2009, 11:22
Хочу заменить в программе класс TThread на стандартные фунции BeginThread и EndThread. Вот так кусок кода выглядел на TThread :

...
for i:=1 to thr do begin
for j:=0 to source.Count -1 do begin
a[i]:=TNewThread.Create(true);
a[i].FreeOnTerminate:=true;
a[i].Priority:=tpLOWEst;
a[i].LoginTH:=copyLogin(Source.Strings[j]);
a[i].passTH:=copyPass(Source.Strings[j]);
a[i].Resume;
application.ProcessMessages;
if Application.Terminated then break;
if stop then begin
...
end;
end;
...
end;

Пробовал различными способами, никак.
Если один поток, то это будет выглядеть так :

...
type
PInfo=TInfo
TInfo=record
login, pass: string;
end;
...

function xz(info:PInfo);
begin
try
...
finally
Dispose(Info);
end;

procedure execute;
var
Info: PInfo;
hThread: integer;
Dummy: DWORD:
begin
New(Info);
Info.Login:='login';
Info.Pass:='pass';
hThread:=BeginThread(nil, 0, @xz, Info, 0, Dummy);
...
end;

И всё работает отлично. Но как организовать работу в несколько потоков, незнаю.

t04
24.05.2009, 03:29
дык думать то надо
надо организовать массив

делай так


function xz(info:PInfo);
begin
try
...
finally
Dispose(Info);
ExitThread(0);
END; //!!!!!!!!!!
end;

var
Info: PInfo;
thID,i : DWORD;
Threads : Array [1..n] of DWORD;
begin
for i := 1 to n do
begin
New(Info);
Info.Login:='login';
Info.Pass:='pass';
Threads[i] := CreateThread(nil, 0, @xz, Info, 0, thID);
end;
end;


а вообще если для себя пишешь то можно не влезать в этот гемор, а пользоваться уже готовыми классами, если ты конечно не извращенец который ради того чтобы убрать из кода лишнюю переменную извратить код по самое не могу.

f0rward
24.05.2009, 12:17
Спасибо, про ошибки в коде сори, на коленке писал.
И там ещё должна быть не ф-я xz, а процедура).

а пользоваться уже готовыми классами
Ты про TThread? Гумно это, хоть там и всё проще гораздо.
Теперь нужно организовать двойной цикл типа :

for i:=1 to thr do begin
for j:=0 to source.Count -1 do begin

При TThread это легко, а c beginthread что-то никак. Напиши, пожалуйста,, если знаешь, как.