【问题标题】:ActiveX DLL called from Python thread从 Python 线程调用的 ActiveX DLL
【发布时间】:2012-05-29 18:04:07
【问题描述】:

我有一个 ActiveX (COM) DLL,它可以进行 Windows 系统调用(例如 ReadFile() 和 WriteFile())。它在主要的 Python GUI 线程中运行良好。但是当从线程调用时,我的 Python GUI 崩溃了。我正在网上做一些研究,我想我需要对 GIL 做点什么。我在正确的轨道上吗?或者请指出我正确的方向。谢谢!

【问题讨论】:

    标签: python multithreading activex


    【解决方案1】:

    不看代码很难说什么,但很可能:

    1. 您的 ActiveX 根本不支持多线程(其中许多不支持)并且您尝试使用来自不同线程的对象。
    2. 包含 ActiveX 的 DLL 执行一些每个线程的初始化,但是当您从另一个线程调用它时,它不会被初始化。

    无论如何,关于 GIL 我不能说什么,但是在我过去处理过 ActiveX 之后,我相信问题的根源很可能是 ActiveX。

    【讨论】:

    • DLL 是单元线程 (STA)。它在被 C# GUI 调用时工作。 msdn.microsoft.com/en-us/library/aa261361%28v=vs.60%29.aspx
    • 如果我在线程中创建 DLL 的新实例,它可以在 Python 中运行。此外,为了不阻塞 C# 中的主线程,需要在线程中创建一个新实例。有什么方法可以避免创建 DLL 的新实例?
    【解决方案2】:

    正如 Vladimir 提到的,我可能是您的 COM 组件不是多线程安全的,您可以测试您的 DLL 注册的“公寓”类型。article 很好地概述了这个问题。

    【讨论】:

    • 应该是“免费”作为 ThreadingModel 存在,只需尝试“公寓”。我曾经遇到过这个问题,这个技巧救了我的命..:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2014-06-01
    • 2014-10-27
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多