![]() |
потоки и indy [delphi]
допустим есть код:
Код:
procedure tnew.getln;пытался примерно вот так: Код:
tnew = class(tthread)краем уха слышал про idthreadcomponent, но адекватных примеров его использования я не нашел.. помогите!!!!11 |
Создавай все компоненты в Execute перед выполнением работы а не в процедурах.
И уничтожай потом в Destroy или где там у тебя завершение. И делай синхронизацию потоков с формой. Ты можешь в литровую банку сразу 5 рук засунуть? З.Ы. И что у тебя за бред с созданием TStringList? Он у тебя создаётся по сто раз и ни разу не уничтожается! |
1) Synchronize
2) объект TIdHTTP сделай локальным для потока Цитата:
|
Цитата:
ды это примерный код, я его тут и придумал (: главное - айдихттп Цитата:
|
Цитата:
Код:
tnew = class(tthread) |
один из простых вариантов юзать MPI :)
|
блин, пример как создавать :)
в tform1.button1click добавить это? new1.idHTTP=idhttp.create; (или как там правильно создавать?) new2.idHTTP=idhttp.create; newN.idHTTP=idhttp.create; |
Цитата:
|
IdHttp надо создавать в конструкторе класса потока..и уничтожать в деструкторе (хотя так и не обязательно, у меня например idhttp и потоки существуют независимо друг от друга, у меня что-то вроде многопоточной очереди)
ТС я тебе советую сначала почитать про классы, научится их писать самому, иначе тебе придется ой как трудно в создании мультитредных сетевых аппликаций |
С сокетами легче синхронизировать ;)
|
Цитата:
|
IDhttp легче в изучение
|
Возможных способов синхронизации потоков не так много и ни в одном из них нет особых сложностей.
|
Цитата:
Цитата:
|
Цитата:
Низачод, сморозил чушь, а теперь чтобы оправдаться вообще загнался Цитата:
|
Цитата:
|
Цитата:
Код:
tnew = class(tthread)wft? что я делаю не так? |
cook := TIdCookieManager.Create(nil);
И мля, нах не надо его вообще создавать то просто http.AllowCookies := True; и все Цитата:
form1.idcookiemanager1.Create(http); что это за конструкотр такой? ты пытаешься создать объект другим компонентом? |
Цитата:
хз, с какого-то примера скопипастил. ща папрбую как ты сказал. |
1n0y, нельзя в потоке просто так использовать компоненты с формы.
Создавай компоненты конкретно в самом потоке! Вот что-то тип такого: Код:
TMyThread = class(TThread) |
уураа! всё работает :)
спасибаспасиба! :-* |
ребят, это снова я :rolleyes:
вот функция авторизации, слизана у пухового. собстно, в чем проблема: в таком виде куки не сохраняются и не передаются, изменить, скажем http.Response.ContentType внутри функции я тоже не могу :( причем, если переменные и функции не делать локальными для потока (ну, тоесть какбэ один поток паралельный главному юзать) - всё отлично работает. что я снова сделал не так? Код:
tgo = class(TThread) |
ну помогите же! :( :( :(
|
Это код чекера ?
|
Цитата:
А с куками что-то непонятно, но скорее всего ты намутил с куки менеджером, например создал не тот который нужно. Покажи как ты вызываешь эту фанкшен свою |
Цитата:
Цитата:
ставил бряки на кукименеджер.pas - вроде работает.. нечего не понимаю ;( Цитата:
|
Цитата:
А ты хочешь контент-тайп у ответа изменить, это бессмыссленнно, тут дело в другом. Для антикапчи можно создать другой экземпляр IDHttp. А вообще доступ к контент-тайпу запроса можно получить так: Http.Request.ContentType, но не Http.Response.ContentType как было у тебя Цитата:
|
Цитата:
делаю я это в процедуре tgo.execute; беру акк, выполняю функцию test_log_vk, и если ответ ок - продолжаю работу с акком. если ответ no_ok - беру другой акк впринцыпе вопрос с куками решен добавлением HTTP.Request.CustomHeaders.Add('Cookie: remixsid=' + sid), но всёже интересно, почему неработает кукименеджер :( |
Цитата:
|
Цитата:
и с одним потоком всё работает, вот вчомдело.. |
залей куда нибудь свой код, и модуль с формой тоже!
|
PHP код:
|
Цитата:
|
Цитата:
PHP код:
ну соответственно чтобы не заставлять вести лишние подсчеты и желательно вынести количество элементов в отдельную переменную, если конечно оно у нас постоянно и не меняется в теле цикла на произвольное, допустим код вида: PHP код:
Ну и банально даже то что при инкрементации переменной цикла i на более высокое значение компилятор не использует Флаг нуля (ZF) а просто сравнивает значение с 0. Семантически это не верно, но я не вижу в этом особого греха. |
То, использовать второй пример в цикле for не имеет смысла это понятно, но вот насчет введения новой переменной для хранения неизменяемого математического выражения спорно...
Кстати у компилятора delphi достаточно хороший встроенный оптимизатор |
Прошу прощения у модераторов за отход от основной темы.
Цитата:
Во вторых, программа не застрахована от посылке сообщений из вне, так как Memo тоже имеет handle что означает что количество строк в ней может измениться если у нас есть пересылка данных с другого потока во время выполнения цикла, а если данных много то и цикл выполняется дискретно,соответственно - порциями которыми выделяет ОС под процесс, ну и что я Вам рассказываю, вы ведь я думаю тоже хороший программист и Сами понимаете это, то есть фактор из вне у нас не повлияет на структуру если count будет считаться в каждой итерации. Однако если вынести за переменную то мы можем схлопотать 2 эксепшена на основании чего можно заключить то что есть возможность внедрения эксплойта в систему, однако для посылке сообщения у нас естественно должны быть соответствующие права. Не могу так сказать на вскидку насколько серьезная это погрешность но факт того что она есть радует. Ну и IDA Pro Free совершенно бесплатна как и Оленька, так что отладчик и проверяйте))). А по поводу того что в дельфинчике довольна хороший оптимизатор, не спорю так и есть, но люблю я эту IDE и компилятор не за это) |
Цитата:
|
| Время: 05:16 |