ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Delphi]. Вопрос по потокам.
  #1  
Старый 23.05.2009, 11:22
f0rward
Новичок
Регистрация: 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;
И всё работает отлично. Но как организовать работу в несколько потоков, незнаю.
 
Ответить с цитированием

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

  #3  
Старый 24.05.2009, 12:17
f0rward
Новичок
Регистрация: 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 что-то никак. Напиши, пожалуйста,, если знаешь, как.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
У меня такой вопрос got_666 E-Mail 3 28.01.2007 15:13
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Простой вопрос про сниффер errou PHP, PERL, MySQL, JavaScript 15 30.01.2006 20:54



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ