Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi]. Вопрос по потокам. (https://forum.antichat.xyz/showthread.php?t=121921)

f0rward 23.05.2009 11:22

[Delphi]. Вопрос по потокам.
 
Хочу заменить в программе класс 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 что-то никак. Напиши, пожалуйста,, если знаешь, как.


Время: 18:52