Beste Weg, um einen Thread zu verlangsamen? Ist die Verwendung von Sleep () in Ordnung?

Ich habe eine C ++ - Bibliothek geschrieben, die einiges an schwerer CPU-Arbeit leistet (alles Mathematik und Berechnungen) und, wenn sie ihren eigenen Geräten überlassen wird, problemlos 100% aller verfügbaren CPU-Ressourcen verbraucht (es wird auch auf die Anzahl der verfügbaren logischen Threads multithreaded) Kerne an der Maschine).

Als solches habe ich einen Rückruf innerhalb der Hauptberechnungsschleife, die die Software, die die Bibliothek verwendet, aufrufen soll:

while(true)
{
    //do math here
    callback(percent_complete);
}

Im Rückruf ruft der Client Sleep (x) auf, um den Thread zu verlangsamen.

Ursprünglich war der clientseitige Code ein fester Sleep (100) -Aufruf. Dies führte jedoch zu einer schlechten unzuverlässigen Leistung, da einige Computer die Berechnung schneller als andere abschließen, der Sleep jedoch auf allen Computern gleich ist. Der Client überprüft nun die Systemzeit und wenn mehr als 1 Sekunde vergangen ist (was == mehrere Iterationen bedeutet), wird eine halbe Sekunde lang geschlafen.

Ist dies eine akzeptable Methode, um einen Faden zu verlangsamen? Sollte ich ein Semaphor / Mutex anstelle von Sleep () verwenden, um die Leistung zu maximieren? Funktioniert das Schlafen x Millisekunden für jede Sekunde der Verarbeitung einwandfrei oder ist etwas nicht in Ordnung, was ich nicht bemerke?

Der Grund, den ich frage, ist, dass die Maschine immer noch stark festsitzt, obwohl Taskman anzeigt, dass der Prozess ~ 10% der CPU einnimmt. Ich habe bereits erfolglos Festplatten- und Speicherkonflikte untersucht, und jetzt frage ich mich, ob die Art und Weise, wie ich den Thread verlangsame, dieses Problem verursacht.

Vielen Dank!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage