Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.08.2008, 12:39

[Erledigt] Thread über die gesamte Programmlaufzeit

Hi an alle,

kann mir evtl. jemand erklären, wie ich einen Thread einsetze, welcher über die gesamte Laufzeit des Programms arbeitet?

Ich brauche so einen Thread für folgendes. Ein Server sendet zwischendurch etwas an mich und der Thread soll bei allen Eingängen auf diese reagieren.

Wie macht man einen solchen Thread?

Gruß
CrazyPlaya
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

26.08.2008, 12:40

Re: Thread über die gesamte Programmlaufzeit

Zitat von »"CrazyPlaya"«


Wie macht man einen solchen Thread?


So wie jeden anderen Thread auch. Du musst eben darauf achten das die Threadprozedur nicht vorzeitig beendet wird.
@D13_Dreinig

3

26.08.2008, 13:32

Und wie kann ich Werte aus dem Thread holen? Also zum Beispiel die Message die Empfangen wurde, wenn der Thread nicht beendet wird?
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

26.08.2008, 13:33

Zitat von »"CrazyPlaya"«

Und wie kann ich Werte aus dem Thread holen? Also zum Beispiel die Message die Empfangen wurde, wenn der Thread nicht beendet wird?


Wo ist denn da der Zusammenhang? Wie würdest dus denn machen wenn der Thread beendet wird?
@D13_Dreinig

5

26.08.2008, 13:37

Na ja ich wüde das evtl über den ExitCode machen, also z.B. über return xxx bei bestimmten Nachrichten. Oder wenn es mehrere Daten wären evtl. eine Struktur als Parameter mitgeben und die Werte dann dort reinschreiben.

Oder muss ich die zwangsläufig die Reaktion auf die Nachrichten dem thread überlassen?
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

26.08.2008, 13:42

Zitat von »"CrazyPlaya"«


Oder muss ich die zwangsläufig die Reaktion auf die Nachrichten dem thread überlassen?


Nein, du kannst durchaus auch auf Speicher aus mehreren Thread zugreifen.
@D13_Dreinig

7

26.08.2008, 13:45

Und wie macht man das? Entschuldige meine Unwissenheit:D

Vllt. ein beispiel dazu.
Wenn die Anwendung jetzt eine Art Messenger wäre dann empfange ich eine Message vom Gegenüber. Darüber möchte ich Informiert werden und diese soll mir im Hauptprozess ausgegeben werden. Darauf möchte ich dann ebenfalls eine Antwort schreiben und das ganze Spiel bis die Sitzung beendet ist. Aber der thread muss dennoch offen bleiben da mir ja auch jemand anderes schreiben könnte. Lassen wir jetzt erst mal weg das mich ja auch mehrere Anschreiben könnten und das zur gleichen Zeit.
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

8

26.08.2008, 13:47

Kurze Zwischenfrage: Hast du schon irgendetwas zu Multithreading und Programmierung gelesen oder ein Tutorial durchgearbeitet? Google hilft bestimmt.

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

9

26.08.2008, 13:48

mach in dem Thread eine Schleife in der er mal auf den Eingang hört (ist was gekommen?) und dann eine gewisse zeit schläft.

falls er was hört schmeisst er ein entsprechendes objekt / oder befehlsstring, oder was auch immer in eine queue.

wenn das hauptprogramm darauf reagieren soll muss es halt von zeit zu zeit schauen ist was in der queue, wenn ja arbeite das ab.


wenns eh nur ein befehl sein kann der so kommt dann halt keine queue verwenden, sondern das was für dein zweck geeignet ist.

dem thread musst du halt nen pointer auf diese queue (oder was es dann ist) mitgeben, und damit nicht beide threads (dein listener und der mainthread) gleichzeitig auf der queue rumtanzen diese z.B. mit einem Mutex bzw. kritischem Abschnitt sichern.

wenn du das hauptprogramm am beenden bist dann auch den thread sauber beenden.

10

26.08.2008, 13:49

Ja klar habe ich mich schon ein wenig mit Multithreading auseinander gesetzt aber zu sowas speziellen nichts finden können. Die Tutorials die ich finden konnten behandeln im Thread eine Sache und dann wird er wieder beendet.
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Werbeanzeige