2012-05-29 4 views
1

Windows 시스템 호출 (예 : ReadFile() 및 WriteFile())을 만드는 ActiveX (COM) DLL이 있습니다. 그것은 주요 파이썬 GUI 스레드에서 잘 작동합니다. 하지만 스레드에서 호출 될 때 내 Python GUI가 충돌합니다. 나는 온라인에서 약간의 연구를하고 있으며 나는 GIL로 무엇인가를해야한다고 생각하고있다. 나는 올바른 길을 가고 있는가? 아니면 올바른 방향으로 나를 가르쳐주십시오. 고맙습니다!파이썬 스레드에서 호출 된 ActiveX DLL

답변

0

이 코드를 보지 않고 아무 말도 어렵지만, 가능성이 그 중 하나입니다 :

  1. 귀하의 액티브 간단하게 (하지 않는 그들 중 많은) 멀티 스레딩을 지원하지 않습니다 그리고 당신은 다른에서 개체 작업을 시도 스레드.
  2. ActiveX가 포함 된 DLL은 일부 스레드 초기화를 수행하지만 다른 스레드에서 호출하면 초기화되지 않습니다.

어쨌든 나는 GIL에 대해 아무 말도 할 수 없지만 내 과거에는 ActiveX를 처리했지만, 문제의 원인은 ActiveX라고 생각됩니다.

+0

DLL은 아파트 스레드 (STA)입니다. C# GUI에서 호출 할 때 작동합니다. http://msdn.microsoft.com/en-us/library/aa261361%28v=vs.60%29.aspx – tosa

+0

스레드에서 DLL의 새 인스턴스를 만드는 경우 Python에서 작동합니다. 또한 C#의 주 스레드를 차단하지 않으려면 새 인스턴스를 스레드에 만들어야합니다. DLL의 새 인스턴스를 만드는 것을 피할 수있는 방법이 있습니까? – tosa

0

블라디미르 (Vladimir)가 언급했듯이 COM 구성 요소가 멀티 스레드 안전하지 않은 것일 수 있습니다. DLL이 등록 된 "아파트"유형을 테스트 할 수 있습니다.이 article은이 문제에 대한 개요를 잘 보여줍니다.

+0

"Free"가 ThreadingModel로 존재해야합니다. "Apartment"를 사용해보십시오. 나는이 문제를 한 번 겪었고,이 팁은 내 인생을 살 렸습니다. :-) – mox

관련 문제