Du bist nicht angemeldet.

Werbeanzeige

Timmyew

Treue Seele

  • »Timmyew« ist der Autor dieses Themas

Beiträge: 105

Wohnort: Prüm

Beruf: Ausbildung Fachinformatiker für die 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 330

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: 105

Wohnort: Prüm

Beruf: Ausbildung Fachinformatiker für die 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.

Werbeanzeige