ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
[Delphi]. Вопрос по потокам. |

23.05.2009, 11:22
|
|
Новичок
Регистрация: 26.10.2008
Сообщений: 15
Провел на форуме: 126398
Репутация:
6
|
|
[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;
И всё работает отлично. Но как организовать работу в несколько потоков, незнаю.
|
|
|

24.05.2009, 03:29
|
|
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
Провел на форуме: 246020
Репутация:
105
|
|
дык думать то надо
надо организовать массив
делай так
Код:
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;
а вообще если для себя пишешь то можно не влезать в этот гемор, а пользоваться уже готовыми классами, если ты конечно не извращенец который ради того чтобы убрать из кода лишнюю переменную извратить код по самое не могу.
|
|
|

24.05.2009, 12:17
|
|
Новичок
Регистрация: 26.10.2008
Сообщений: 15
Провел на форуме: 126398
Репутация:
6
|
|
Спасибо, про ошибки в коде сори, на коленке писал.
И там ещё должна быть не ф-я xz, а процедура).
а пользоваться уже готовыми классами
Ты про TThread? Гумно это, хоть там и всё проще гораздо.
Теперь нужно организовать двойной цикл типа :
Код:
for i:=1 to thr do begin
for j:=0 to source.Count -1 do begin
При TThread это легко, а c beginthread что-то никак. Напиши, пожалуйста,, если знаешь, как.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|