使用win32ui DDE modu的Python线程

2024-09-21 03:17:34 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑 显然,这比我想象的要深入;我只是试图在运行线程中创建服务器,但没有成功。在

运行Python2.7 32位Windows。似乎dde模块(或我使用它的方式?)不能很好地处理线程。在

下面是详细的代码演示:

这是有效的:

import win32ui
import dde
import threading

class Conversation(threading.Thread):
    def __init__(self, server, first, second, tag)
        threading.Thread.__init__(self)
        self.tag = tag #string
        self.first = first #string
        self.second = second #string
        self.server = server #dde server object

        self.conversation = dde.CreateConversation(server)

        #The focus of the problem. Here it works.
        self.conversation.ConnectTo(self.first, self.second)

    def run(self):
        print ""

def main():
    machine = "Irrelevant_MachineName"
    tag = "Irrelevant_Tagname"
    server = dde.CreateServer()
    server.Create("Irrelevant_ServerName")

    t = Conversation(server, "Irrelevant_Name", machine, tag)
    t.start()


main()    

这不是:

^{pr2}$

当它失败时,我得到一个错误:

Exception in thread Thread-1:
Traceback (most recent call last):
    File "c:\Python27\lib\threading.py", line 808, in __bootstrap_inner
     self.run()
    File "DDE.py", line 28 in run
     self.conversation.ConnectTo(self.first, self.second)
error: ConnectTo failed

为什么会这样?这将是我的第一个多线程程序,所以我不确定我是否在做一些愚蠢的事情。在

但在我看来,我应该可以打电话给dde.server.对话从线程模块的“run()”方法中调用对象的ConnectTo方法。在

我曾经研究过多处理,但我认为这不适合我的情况。在

有什么想法吗?我将非常感谢你的帮助!!!在

编辑已添加“线程。线程.init(self)“对失败的和成功的示例。还是没有骰子。

编辑2

另外,我听说过tcldde库的故事,但不知道在哪里可以找到它。如果有人能给我一个用python访问它的方法,我将永远欠你的债。在


Tags: runimportself编辑serverdeftag线程
1条回答
网友
1楼 · 发布于 2024-09-21 03:17:34

因此,在WindowsDDE中,您似乎只能在线程本身内部使用ConnectTo的实例。它确实支持多线程,而且当你的run仍然在类内部时,DDE可能会将其视为初始线程之外的内容。我不知道这实际上是一个答案,但在我看来,如果你是第一个代码块正在工作,那么这个错误完全有可能只是WindowsDDE和多线程的一个特性。在

相关问题 更多 >

    热门问题