C++: Threads unter Windows "schlafen legen" und nach gewisser Zeit "aufwecken"?

CapJo

Admiral Special
Mitglied seit
19.04.2002
Beiträge
1.488
Renomée
17
Standort
nähe Landshut
Hat da jemand vielleicht ein gutes Tutorial dazu oder vielleicht auch eine Buchempfehlung, die sich mit diesem Thema beschäftigt.

In den meisten C++ Büchern findet man zu Betriebssystemspezifischen Aufrufen keine Information.

Ihr könnt auch gerne Codeschnipsel posten.

Danke im Voraus.
 
Ich habe hier ein sehr gutes Buch zum Thema, ein Klassiker, kann ich nur empfehlen:
"Microsoft Windows Programmierung für Experten"
bzw. in Englisch
"Advanced Windows Programming".
von Jeffrey Richter
4. Auflage
Behandelt sehr ausführlich Prozesse, Threads usw.
 
Etwas Inspiration kann ich ja noch posten: ;)

Die Simpelmethode, um einen Thread schlafen zu legen, ist ein Aufruf von Sleep(Miliseconds). Das ist aber sehr ungenau, vor allem bei kurzen Zeiten.

Grundsätzlich wartet man am Besten mit Hilfe von Kernelobjekten (Events, Mutexes o.a.) und der Funktion WaitForSingleObject(hObject, Miliseconds).

Beispiel für einen zyklischen Timer für 100 ms in etwa:
PHP:
static unsigned __stdcall TimerThread (PVOID pvoid);
static HANDLE hTimerEvent = 0;
static HANDLE hTimerThread = 0;

...
// Event erzeugen:
hTimerEvent = CreateEvent(NULL, FALSE, TRUE, __TEXT("hTimerEvent")); 

// Thread starten
...
...
// Der Thread selbst:
static unsigned __stdcall TimerThread (PVOID pvoid) 
{
   while (Irgendein_Abbruchkriterium)
   {
       WaitForSingleObject(hTimerEvent, 100);

       // Tu irgendwas
   }
   return 0;
}

Den Thread kann man auch aus einem anderen Thread heraus mit einem Aufruf von SetEvent(hTimerEvent) aufwecken, d.h. WaitForSingleObject(hTimerEvent, 100) kehrt dann vor Ablauf der 100 ms zurück.

Wenn man im Warte-Thread WaitForSingleObject(hTimerEvent, INFINITE); benützt, wartet der Thread ewig und kann dann nur noch mittels SetEvent(hTimerEvent) aus einem anderen Thread heraus geweckt werden.

Ciao,
Ray
 
Danke für die weiteren Infos.

Unter Linux würd ich bei Prozessen mit Signalen usw. arbeiten, aber unter Windows hab ich mit dem ganzen bisher keine Erfahrung.
 
Zurück
Oben Unten