Передача указателя интерфейса XPCOM через поток - PullRequest
1 голос
/ 10 декабря 2011

Я новичок в разработке расширения Firefox с XPCOM.В настоящее время я использую фоновый поток, чтобы выполнить некоторую работу в XPCOM, и мне нужно передать указатель одного интерфейса XPCOM (например, nsIDomwindow) из основного потока в этот поток.Но если использовать указатель в качестве параметра в Windows API fundtion Createthread и использовать его тогда, это вызовет сбой Firefox.

Как решить эту проблему?Есть ли подобный способ использовать CoMarshalInterThreadInterfaceInStream / CoGetInterfaceAndReleaseStream в MS com?Поддерживает ли XPCOM только один поток?

С нетерпением ждем всех ваших советов и примеров кода!Заранее спасибо!

1 Ответ

1 голос
/ 10 декабря 2011

Многие объекты XPCOM не являются поточно-ориентированными, в частности любые объекты DOM доступны только из основного потока.Чтобы проверить, является ли объект потокобезопасным, необходимо QueryInterface указать nsIClassInfo и проверить, содержит ли nsIClassInfo.flags флаг nsIClassInfo.THREADSAFE.Если это так, вы можете просто передать указатель на интерфейс между потоками.

...