是否有可能从不同的线程调用JS函数?
问题描述:
我试图让2个不同的浏览器通过使用JS window.external的本地代码主机(C++)相互通信。是否有可能从不同的线程调用JS函数?
语法是这样的:
上destination.js:
window.external.register("dest", eventCallbak);
function eventCallback(senderID, data) {
alert("message recieved from " + senderID + " with data of " + data);
}
上source.js:
window.external.sendMsg("source", "dest", "Hello dest! this is source...");
我已经成功地这样做同步,通过保存eventCallback
参数,将其保存为IDispatch
,并在询问时调用它(全部在同一个线程中)。那里没有问题。试图这样做异步时,意味着
的烦恼开始 - 保存eventCallback
作为一个线程的IDispatch
,并在另一个线程以后调用它,导致invoke方法失败的E_UNEXPECTED
HRESULT
。
任何想法?
谢谢,
答
两个浏览器实例使用JS VM的不同实例。 您通常无法从一个VM /堆中获取一个对象,并将其传递给另一个VM /堆。因此你需要在这里发明某种编组。
是的,最终我用CoMarshalInterThreadInterfaceInStream来解决它。 谢谢! – Omer 2011-04-30 18:23:04