PureBasic - Thread

Einleitung

Ein Thread ist ein Programmteil, welcher asynchron, d.h. im Hintergrund des Hauptprogramms, läuft. Dies bedeutet: es ist möglich, langwierige Operationen (Packen, Bildverarbeitung...) durchzuführen, ohne das gesamte Programm anzuhalten und damit dem Benutzer das Weiterarbeiten zu ermöglichen. Ein Thread läuft innerhalb Ihres Programms, es ist kein weiterer Prozess. Wenn das Hauptprogramm beendet wird, werden alle Threads zerstört. Unter PureBasic sind Threads einfach eine Prozedur, welche asynchron aufgerufen wird. Der Thread läuft, bis die Prozedur endet.

Beispiele für Einsatzmöglichkeiten von Programmen - bei denen Threads sinnvoll sind - bestehen z.B. darin, wenn Sie verschiedene Situationen mit verschiedenen Antwortzeiten oder Situationen, die in verschiedenen Intervallen auftreten, handhaben müssen. Um auf den vorigen Absatz zurückzukommen: die Antwortzeiten der eigentlichen Bild-Verarbeitung und der Benutzeroberfläche sind ziemlich verschieden (Sie können auf die Verarbeitung des Bildes warten, haben aber gleichzeitig eine reagierende Benutzerschnittstelle).

Hinweis: Threads müssen vorsichtig benutzt werden, da es möglich ist, dass Sie gleichzeitigen Zugriff auf geteilte (shared) Ressourcen (Speicher, Variablen, Dateien, etc.) haben und Sie dann manuell sicherstellen müssen, deshalb nicht in Konflikte zu geraten. Zum Beispiel ist es nicht sicher, von mehr als einem Thread aus Strings zu modifizieren bzw. in Strings zu schreiben, da sich Strings den gleichen internen Speicherbuffer teilen. Wenn Sie während dem Ablaufen Ihrer Threads aus Strings immer nur lesen, dann sollte dies sicher sein.

Wenn Sie in Threads trotzdem Strings (oder jede andere geteilte Ressource) sicher modifizieren möchten, dann müssen Sie sicherstellen, dass nur ein Thread die Strings zur gleichen Zeit benutzen kann. Um dies zu tun, sollten Sie die Synchronisierungsfähigkeiten des von Ihnen verwendeten OS'es benutzen. Es ist nicht sicher, einfach eine globale Variable als Flag zu verwenden, um anzuzeigen, dass der Stringbuffer (oder irgendetwas anderes) gerade benutzt wird. Wie können Sie korrekte Synchronisation sicherstellen, wenn Sie diese globale Variable verändern?

Hinweis: Benutzen Sie innerhalb von Threads kein DirectX (MS Windows Einschränkung)! Wenn Sie auf Grafikdarstellung in Threads angewiesen sind, verwenden Sie stattdessen Images und 2DDrawing.

Befehlsübersicht

CreateThread
KillThread
PauseThread
ResumeThread
ThreadPriority
WaitThread

Beispiel

Thread.pb

Unterstützte OS

Windows, Linux, MacOS X

Referenz-Handbuch - Inhaltsverzeichnis