-
Akella-M (18.04.13 13:04) [0]В потоке обращаюсь через Syncrhonize к компоненту на форме - ошибка.
Создаю компонент в потоке - тоже ошибка.
constructor TSellerReceive.Create(Name: string);
begin
CoInitialize(nil);
inherited Create(True);
FreeOnTerminate := True;
GMS:=tmemorystream.Create;
GCQ:=TSQLQuery.Create(nil);
GXML:=txmldocument.Create(nil);
...
procedure TSellerReceive.Execute;
var
ReceivedXMLText:TStringList;
begin
...
GXML.XML.Text:=ReceivedXMLText.text;
GXML.Active:=true;
...
тут выдает Exeption ту самую ошибку
Delphi XE3, Win7x64 -
Медвежонок Пятачок © (18.04.13 14:08) [1]все стереть и переписать.
экземпляр создается в одном потоке, коуинит делается в том же, а используется все это в другом потоке. -
Akella-M (18.04.13 16:17) [2]Не очень понял, но реализовал аналогичную идея используя IXMLDocument2
Правда 4 потока выдают производительность HTTP метод POST + SQLQuery запрос Insert за три секунды.
Не пойму почему так долго, средняя скорость аналогичной операции без IXMLDocument2 занимала 1 секунду на 120 записей.
Может тормозить изза IXMLDocument2? -
CoInitialize, CoUninitialize, TXMLDocument.Create(nil) и XML := nil вынести в Execute.
-
Akella-M (18.04.13 20:20) [4]Помогло, спасибо.
Кто будет гуглить эту тему - возможно Вам поможет инфа, что в потоке TXMLDocument.Create нельзя указывать с nil, укажите хотябы application:
TXMLDocument.Create(Application);
Иначе будет Invalit Pointer Operation -
Медвежонок Пятачок © (18.04.13 20:29) [5]что в потоке TXMLDocument.Create нельзя указывать с nil,
Можно.
Хоть в потоке хоть как. Просто надо хелп читать. -
> Кто будет гуглить эту тему - возможно Вам поможет инфа,
> что в потоке TXMLDocument.Create нельзя указывать с nil,
> укажите хотябы application:
>
> TXMLDocument.Create(Application);
>
> Иначе будет Invalit Pointer Operationvar
xml: IXMLDocument
begin
xml := TXMLDocument.Create(nil);
end;
var
xml: TXMLDocument;
begin
xml := TXMLDocument.Create(SomeOwner);
try
finally
xml.Free
end;
end;
Почувствуй разницу. В первом случае ты работаешь с ним, как с интерфейсом, при refCount=0 деструктор вызовется автоматически.
Во втором случае - как с невизуальным компонентом, который можно на форму или в дата-модуль кинуть.
Ты, скорее всего, объявил его именно как TXMLDocument, вызвал деструктор, а потом деструктор вызвался автоматом повторно при удалении ссылки, о чём исключение IPO и говорит.
От потока не зависит, в главном будет то же самое.