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

Timmyew

Treue Seele

  • »Timmyew« ist der Autor dieses Themas

Beiträge: 128

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

01.07.2021, 19:13

C++ Threads Suspend und Resume

Guten Tag,

bisher kannte ich Threads immer in dem Zusammenhang, dass man diese in anderen Programmiersprachen explizit startet.
Allerdings scheint dies in C++ anders zu sein und da setzt mein Problem an.
Gibt es eine Möglichkeit einen Thread zu erstellen ohne diesen anschließend sofort zu starten?
In Delphi gibt es die Möglichkeit einen Thread explizit zu starten, wenn man diesen braucht.
Wenn der Thread seine Arbeit erledigt hat, kann dieser zusätzlich noch erneut gestartet werden.

Zusammenfasst was ich von euch wissen möchte:
1. Kann man einen Thread erzeugen und ihn im späterem Verlauf starten?
2. Kann man einen Thread wieder erneut starten lassen, nachdem dieser in der vorherigen Iteration schon gestartet wurde?
3. Wenn diese Fragen mit ja beantwortet wurden, würde ich mich über einen kleinen Beispielcode freuen.

MFG,
Timmyew.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

02.07.2021, 00:06

Mit std::thread geht das nicht, da startet ein Thread immer automatisch. Du kannst den Thread aber starten und dann auf ein Signal warten lassen (siehe https://en.cppreference.com/w/cpp/thread/condition_variable). Einen Thread neu zu starten ohne ihn neu zu erzeugen geht meines Wissens auch nicht. Wofür brauchst du das denn?

Jonathan

Community-Fossil

  • Private Nachricht senden

3

02.07.2021, 16:22

Naja, du kannst das Problem ganz einfach dadurch lösen, dass du eine Wrapper-Klasse hast, die z.B. einen unique_ptr auf einen std::thread besitzt. Dann kannst du ein Objekt dieser Klasse anlegen und eine "StartThread"-Methode haben, die dann das std::thread Objekt erzeugt und somit den Thread startet. Auf die gleiche Weise kannst du dann den Thread neustarten, indem du das Objekt löschst und neu anlegst.

Einen Thread zu erzeugen aber nicht zu starten verstößt in gewisser Hinsicht gegen das RAII-Prinzip:

https://de.wikipedia.org/wiki/Ressourcen…Initialisierung

Du bezahlst die Kosten für etwas, was du nicht benutzt, das ist ineffizient und sollte vermieden werden.
Lieber dumm fragen, als dumm bleiben!

Timmyew

Treue Seele

  • »Timmyew« ist der Autor dieses Themas

Beiträge: 128

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

03.07.2021, 08:12

Mit std::thread geht das nicht, da startet ein Thread immer automatisch. Du kannst den Thread aber starten und dann auf ein Signal warten lassen (siehe https://en.cppreference.com/w/cpp/thread/condition_variable). Einen Thread neu zu starten ohne ihn neu zu erzeugen geht meines Wissens auch nicht. Wofür brauchst du das denn?


So wie es aussieht, hast du mir weitergeholfen.
Es geht um die Updates von vielen Objekten.

5

30.07.2021, 18:37

Mit std::thread geht das nicht, da startet ein Thread immer automatisch. Du kannst den Thread aber starten und dann auf ein Signal warten lassen (siehe https://en.cppreference.com/w/cpp/thread/condition_variable). Einen Thread neu zu starten ohne ihn neu zu erzeugen geht meines Wissens auch nicht. Wofür brauchst du das denn?


So wie es aussieht, hast du mir weitergeholfen.
Es geht um die Updates von vielen Objekten.

Das klingt nun aber eher verdächtig danach, als wären die c++17 execution_policy Algorithmen eher das, was du benutzen solltest.

Werbeanzeige