wxpython中利用线程防止假死的实现方法
前段时间我编写了一个工业控制的软件,在使用中一直存在一个问题,就是当软件检索设备时,因为这个功能执行的时间比较长,导致GUI界面假死,让用户分辨不清楚软件到底仍在执行,还是真的挂掉了。(虽然我设计了同步log显示,但是这个也同样假死了)
程序截图如下:
代码解析如下:
# -*- coding: utf-8 -*- import time import wx from threading import Thread from wx.lib.pubsub import Publisher
time库用来执行定时函数,模拟需要长时间执行的功能。Publisher用来在线程间传输消息。
class TestThread(Thread): def __init__(self): #线程实例化时立即启动 Thread.__init__(self) self.start() def run(self): #线程执行的代码 for i in range(101): time.sleep(0.03) wx.CallAfter(Publisher().sendMessage, "update", i) time.sleep(0.5) wx.CallAfter(Publisher().sendMessage, "update", u"线程结束")
TestThread的__init__函数,定义线程实例化时就启动,run函数就是需要长时间执行的程序。
wx.CallAfter与Publisher().sendMessage用来向GUI发送消息。
class MyForm ( wx.Frame ): def __init__( self, parent ): wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Leniy,20140627", pos = wx.DefaultPosition, size = wx.Size( -1,-1 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) gSizer2 = wx.GridSizer( 0, 3, 0, 0 ) self.m_button2 = wx.Button( self, wx.ID_ANY, u"执行线程", wx.DefaultPosition, wx.DefaultSize, 0 ) gSizer2.Add( self.m_button2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 ) self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"MyLabel", wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_staticText2.Wrap( -1 ) gSizer2.Add( self.m_staticText2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 ) self.m_gauge1 = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL ) self.m_gauge1.SetValue( 0 ) gSizer2.Add( self.m_gauge1, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 ) self.SetSizer( gSizer2 ) self.Layout() gSizer2.Fit( self ) self.Centre( wx.BOTH ) self.m_button2.Bind( wx.EVT_BUTTON, self.onButton ) Publisher().subscribe(self.updateDisplay, "update") def updateDisplay(self, msg): t = msg.data if isinstance(t, int):#如果是数字,说明线程正在执行,显示数字 self.m_staticText2.SetLabel("%s%%" % t) self.m_gauge1.SetValue( t ) else:#否则线程未执行,将按钮重新开启 self.m_staticText2.SetLabel("%s" % t) self.m_button2.Enable() def onButton( self, event ): TestThread() self.m_staticText2.SetLabel(u"线程开始") event.GetEventObject().Disable()
这个就是GUI的主程序,__init__中使用Publisher().subscribe(self.updateDisplay, “update”)声明了获取线程消息以及显示的方法。
if __name__ == "__main__": app = wx.PySimpleApp() MyForm(None).Show() app.MainLoop()
最后将窗口MyForm(None).Show()显示出来,程序就完成了。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

8-Kern bedeutet, dass die CPU über 8 physische Kerne verfügt, und 16-Thread bedeutet, dass die CPU bis zu 16 Threads gleichzeitig ausführen kann. Die Anzahl der Kerne und Threads sind wichtige Leistungsindikatoren einer Computer-CPU. Je höher die Anzahl der Kerne der CPU, desto höher die Anzahl der Threads und desto günstiger die gleichzeitige Ausführung mehrerer Programme. weil die Anzahl der Threads der Anzahl entspricht, die die CPU zu einem bestimmten Zeitpunkt gleichzeitig ausführen kann. Die Anzahl der parallel zu verarbeitenden Aufgaben. Multithreading kann die superskalare Verarbeitung mit großen Problemen außerhalb der Reihenfolge maximieren, die Auslastung von Prozessor-Rechnerkomponenten verbessern und Verzögerungen beim Speicherzugriff verringern, die durch Datenkorrelation oder Cache-Fehler verursacht werden.

Eine kurze Einführung in die Python-GUI-Programmierung. GUI (Graphical User Interface, grafische Benutzeroberfläche) ist eine Möglichkeit, Benutzern die grafische Interaktion mit Computern zu ermöglichen. Unter GUI-Programmierung versteht man die Verwendung von Programmiersprachen zur Erstellung grafischer Benutzeroberflächen. Python ist eine beliebte Programmiersprache, die eine umfangreiche GUI-Bibliothek bietet und die Python-GUI-Programmierung sehr einfach macht. Einführung in die Python-GUI-Bibliothek Es gibt viele GUI-Bibliotheken in Python, von denen die am häufigsten verwendeten sind: Tkinter: Tkinter ist die GUI-Bibliothek, die mit der Python-Standardbibliothek geliefert wird. Sie ist einfach und benutzerfreundlich, verfügt jedoch über begrenzte Funktionen. PyQt: PyQt ist eine plattformübergreifende GUI-Bibliothek mit leistungsstarken Funktionen.

Um Thread-Aushunger zu vermeiden, können Sie faire Sperren verwenden, um eine faire Zuweisung von Ressourcen sicherzustellen, oder Thread-Prioritäten festlegen. Um die Prioritätsumkehr zu lösen, können Sie die Prioritätsvererbung verwenden, um die Priorität des Threads, der die Ressource enthält, vorübergehend zu erhöhen, oder die Sperrenerhöhung verwenden, um die Priorität des Threads zu erhöhen, der die Ressource benötigt.

Zu den Thread-Beendigungs- und Abbruchmechanismen in C++ gehören: Thread-Beendigung: std::thread::join() blockiert den aktuellen Thread, bis der Ziel-Thread die Ausführung abschließt. std::thread::detach() trennt den Ziel-Thread von der Thread-Verwaltung. Thread-Abbruch: std::thread::request_termination() fordert den Ziel-Thread auf, die Ausführung zu beenden; std::thread::get_id() erhält die Ziel-Thread-ID und kann mit std::terminate() verwendet werden, um das Ziel sofort zu beenden Faden. Im tatsächlichen Kampf ermöglicht request_termination() dem Thread, den Zeitpunkt der Beendigung zu bestimmen, und join() stellt dies in der Hauptzeile sicher

„Thread“ ist die kleinste Einheit des Befehlsflusses, wenn ein Programm ausgeführt wird. Ein Prozess bezieht sich auf ein Programm mit bestimmten unabhängigen Funktionen. Ein Thread ist Teil des Prozesses und beschreibt den Ausführungsstatus des Befehlsflusses. Der Thread ist die kleinste Einheit des Befehlsausführungsflusses im Prozess und die Grundeinheit der CPU-Planung. Ein Thread ist ein Ausführungsprozess einer Aufgabe (ein Programmsegment); ein Thread belegt keinen Speicherplatz, er ist im Speicherbereich des Prozesses enthalten. Innerhalb desselben Prozesses teilen sich mehrere Threads die Ressourcen des Prozesses; ein Prozess verfügt über mindestens einen Thread.

Bei der Entwicklung von JavaFX-Anwendungen treten häufig Fehler auf, bei denen der JavaFX-Thread hängen bleibt. Solche Fehler sind unterschiedlich schwerwiegend und können die Stabilität und Leistung des Programms beeinträchtigen. Um den normalen Betrieb des Programms sicherzustellen, müssen wir die Ursachen und Lösungen von JavaFX-Thread-Steckfehlern verstehen und wissen, wie wir verhindern können, dass dieser Fehler auftritt. 1. Die Ursache für den Fehler „JavaFX-Thread steckt fest“ JavaFX ist ein Multithread-UI-Anwendungsframework, das es Programmen ermöglicht, über einen längeren Zeitraum in Hintergrundthreads ausgeführt zu werden.

Python ist eine prägnante, leicht zu erlernende und effiziente Programmiersprache. Es wird häufig in verschiedenen Bereichen wie Datenwissenschaft, künstliche Intelligenz, Spieleentwicklung, Netzwerkprogrammierung usw. eingesetzt. Obwohl Python mit einigen GUI-Bibliotheken geliefert wird, sind ihre Funktionen relativ einfach und können die Anforderungen verschiedener komplexer Anwendungen nicht erfüllen. Daher stehen in Python viele GUI-Bibliotheken zur Auswahl, darunter wxPython, das in diesem Artikel ausführlich vorgestellt wird. Einführung in wxPython wxPython ist eine plattformübergreifende Open-Source-GUI-Bibliothek, die auf basiert

Einführung in die PythonGUI-Programmierung Bei der PythonGUI-Programmierung, also der grafischen Benutzeroberflächenprogrammierung, werden Anwendungsprogrammschnittstellen mithilfe der Python-Sprache erstellt. GUI-Anwendungen verfügen normalerweise über Elemente wie Fenster, Schaltflächen, Textfelder, Menüs usw., über die Benutzer mit dem Programm interagieren können. Die Python-GUI-Programmierung bietet viele Vorteile. Erstens kann es Ihr Programm schöner und benutzerfreundlicher machen. Zweitens kann es Ihr Programm plattformübergreifend machen, das heißt, es kann auf verschiedenen Betriebssystemen ausgeführt werden. Drittens kann es Ihr Programm flexibler und einfacher erweiterbar machen. Häufig verwendete Python-GUI-Bibliotheken In Python gibt es viele häufig verwendete GUI-Bibliotheken, darunter Tkinter, PyQt, wxPython und PyG
