Najlepszy sposób na spowolnienie wątku? Czy korzystanie z trybu uśpienia () jest OK?
Napisałem bibliotekę C ++, która działa z dużą mocą procesora (wszystko to z matematyki i obliczeń), a jeśli zostanie pozostawiona własnym urządzeniom, z łatwością pochłonie 100% wszystkich dostępnych zasobów procesora (jest również wielowątkowa do liczby dostępnych logicznych rdzenie na maszynie).
Jako taki mam wywołanie zwrotne wewnątrz głównej pętli obliczeniowej, które ma wywoływać oprogramowanie korzystające z biblioteki:
while(true)
{
//do math here
callback(percent_complete);
}
W wywołaniu zwrotnym klient wywołuje tryb uśpienia (x), aby spowolnić wątek.
Pierwotnie kod klienta był stałym połączeniem Sleep (100), ale doprowadziło to do złej niezawodnej wydajności, ponieważ niektóre komputery kończą matematykę szybciej niż inne, ale sen jest taki sam na wszystkich komputerach. Teraz klient sprawdza czas systemowy, a jeśli minęło więcej niż 1 sekunda (co == kilka iteracji), będzie spać przez pół sekundy.
Czy to akceptowalny sposób na spowolnienie wątku? Czy powinienem używać semafora / muteksu zamiast Sleep (), aby zmaksymalizować wydajność? Czy śpi x milisekund na każdą 1 sekundę pracy działa poprawnie, czy jest coś nie tak, że nie zauważam?
Powód, dla którego pytam, jest taki, że maszyna nadal jest mocno zapchana, mimo że zadanie pokazuje proces zajmujący ~ 10% procesora. Nie udało mi się już przetestować dysku twardego i rywalizacji o pamięć, więc teraz zastanawiam się, czy sposób, w jaki zwalniam wątek, powoduje ten problem.
Dzięki!