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

10.11.2008, 13:55
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Странные ошибки в компонентах
Довольно странные и специфически ошибка связанные с работой в потоке.
1) Webbrowser и потоки.
Если запустить поток в котором компоненту Webbrowser задастся переход на адрес.
пример
Код:
procedure Go(param:pointer);stdcall;
begin
form1.WebBrowser1.Navigate('http://ya.ru');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
thId:dword;
begin
thId:=CreateThread(nil,0,@go,nil,0,thId);
end;
выдает ошибку. Даже прога бывает падает. Причем проявилось тока на Win XP SP2 и SP3. НА Win 2003 - работает нормально.
2) аналогично предудущему через раз отображается inputbox вызываемый в потоке. Причем появляется сообщение типа, канвас не может быть отрисован.
Если через except обработать исключение и заного попробовать повторить операцию то получается. При этом такой глюк независимо от винды
|
|
|

10.11.2008, 15:15
|
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме: 2050916
Репутация:
0
|
|
WebBrowser это ActiveX компонент, и следовательно работает очень специфично в потоках. Лучше всего его запускать только в главном потоке. А еще лучше - вообще не использовать.
|
|
|

11.11.2008, 04:03
|
|
Участник форума
Регистрация: 02.09.2008
Сообщений: 101
Провел на форуме: 196792
Репутация:
37
|
|
VCL это однопоточная библиотека.
Физически, её, конечно, можно дергать из других потоков, но результат будет обескураживающий.
Обращайся из главного потока, например, через Synchronize()
|
|
|

11.11.2008, 10:09
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Вообще WB я юзал для того чтобы нормально отображать картинки независимо от формата их. bmp,jpg,gif,png Да и облегчает загрузку с удаленных серверов в плане если используется ssl
Но тутже проблема не только с WB но еще и с inputbox который основан тоже на vcl
Хотя на win2003 всё пашет. Так что дело не в многопоточности.
Проблема решена по простому - через посылку форме собственных сообщений и в обработчике стоят все действия.
|
|
|

21.11.2008, 19:55
|
|
Новичок
Регистрация: 16.08.2006
Сообщений: 20
Провел на форуме: 64398
Репутация:
8
|
|
кури посты про синхронизацию - так как ты делаешь - делать низзя 
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|