【问题标题】:Is it possible to invoke a JS function from a different thread?是否可以从不同的线程调用 JS 函数?
【发布时间】:2011-08-15 02:50:41
【问题描述】:

我正在尝试使用 JS window.external 使 2 个不同的浏览器通过本机代码主机 (C++) 相互通信。

语法类似于:

在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,然后稍后在另一个线程中调用它,导致调用方法失败,@987654328 的 HRESULT @。

有什么想法吗?

谢谢,

【问题讨论】:

    标签: javascript c++ multithreading internet-explorer com


    【解决方案1】:

    两个浏览器实例使用不同的 JS VM 实例。 通常,您不能从一个 VM/堆中获取一个对象并将其传递给另一个 VM/堆。

    所以你需要在这里发明某种编组。

    【讨论】:

    • 是的,最终我使用了 CoMarshalInterThreadInterfaceInStream 来解决它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多