Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython&;串行连续通信_Python_Multithreading_Wxpython_Scheduling_Pyserial - Fatal编程技术网

wxPython&;串行连续通信

wxPython&;串行连续通信,python,multithreading,wxpython,scheduling,pyserial,Python,Multithreading,Wxpython,Scheduling,Pyserial,我是python的新手,每天都在学习新东西。我有一个关于集成wxpython和pyserial的问题。我正在编写一个GUI应用程序,通过pyserial控制微处理器 我写了一个wxpython脚本-显示良好-带有按钮和文本字段。 我使用pyserial的小命令测试了与微处理器的通信——一切都很好 问题: 我将在我的GUI上有一个按钮(比如按钮a),点击后,它会检查是否进行了串行通信(当然是通过发送和接收数据)。一旦通信良好,我必须确保只要我使用GUI,通信就会保持良好。因此,我决定编写一个外部函

我是python的新手,每天都在学习新东西。我有一个关于集成wxpython和pyserial的问题。我正在编写一个GUI应用程序,通过pyserial控制微处理器

我写了一个wxpython脚本-显示良好-带有按钮和文本字段。 我使用pyserial的小命令测试了与微处理器的通信——一切都很好

问题:

  • 我将在我的GUI上有一个按钮(比如按钮a),点击后,它会检查是否进行了串行通信(当然是通过发送和接收数据)。一旦通信良好,我必须确保只要我使用GUI,通信就会保持良好。因此,我决定编写一个外部函数,用于连续发送和读取数据(可能是一个for循环)。根据函数返回值,我将知道串行通信是否处于活动状态(这可能是个坏主意,但这是我得到的最好结果)

  • 现在的问题是,我的GUI、按钮、文本字段等还有很多其他功能。。例如,当按下另一个按钮(比如按钮B)时,我想向微处理器发送一个特定的命令。这需要我中断在步骤1中进行的串行通信,单击按钮B发送数据,然后再次重新启动步骤1通信(以继续检查串行通信是否处于活动状态)。我不知道我怎样才能中断交流。步骤1串行通信(用于循环)绑定到按钮A单击。单击按钮A后,它进入for循环,并持续检查串行通信

  • 我有很多这样的按钮和文本字段,它们将向微处理器读写数据。每当我想做一个事件时,我必须在步骤1中停止串行通信并重新启动它

  • 除此之外,我只能每隔100毫秒检查一次串行通信(在步骤1中提到)。我不能只写一个for循环。我必须做一些修改,比如时间延迟(100ms)或其他什么

  • 我不知道如何构建它,但可能我只是需要一个好的算法想法,或者在导入sched或导入线程的帮助下以某种方式实现它

    我主要是想避免导入线程,因为我的微处理器内存非常少。同样使用wxPython的线程也会让人头痛(我在网上读到)

    我的一位同事建议从我的操作系统中使用“计时器服务”。我认为python没有这样的特性。至少我不知道他在说什么。他的论点是,如果我能使用它,我可以很容易地每100毫秒运行一次连续串行通信检查


    任何帮助都将不胜感激。我不是在寻找任何复杂的解决方案,我很感激如果你附上一段代码,使用非常基本的编程。我在一个类中使用了wxPython GUI。

    您可以将线程与wx一起使用,只要在不在主线程中时使用wx.CallAfter,一切都会好起来:线程是这里绝对正确的答案。。。计时器刚刚触发一个事件。。。您必须捕获该事件,然后调用您的函数。。。当你的函数运行时,它仍然会阻塞,仍然在寻找答案。我和你有着几乎相同的要求:你曾经解决过你的问题吗?你可以将线程与wx一起使用,只要在不在主线程中时使用wx.CallAfter,一切都会好起来:线程是这里绝对正确的答案。。。计时器刚刚触发一个事件。。。您必须捕获该事件,然后调用您的函数。。。当你的功能运行时,它仍然会阻塞,仍然在寻找答案。我的要求与你自己几乎相同:你曾经解决过你的问题吗?