Mam pętlę i chcę się upewnić, że działa przez około (w przybliżeniu) ustaloną ilość czasu dla każdej pętli.alternatywa dla std :: this_thread :: sleep_for()
Używam sleep_for
, aby osiągnąć to zachowanie, ale chcę również, aby program mógł się kompilować w środowiskach, które nie zawierają pełnego wsparcia standardowej biblioteki wątków. Teraz mam coś takiego:
using namespace std;
using namespace std::chrono;
//
while(!quit)
{
steady_clock::time_point then = steady_clock::now();
//...do loop stuff
steady_clock::time_point now = steady_clock::now();
#ifdef NOTHREADS
// version for systems without thread support
while(duration_cast<microseconds>(now - then).count() < 10000)
{
now = steady_clock::now();
}
#else
this_thread::sleep_for(microseconds{ 10000 - duration_cast<microseconds>(now - then).count() });
#endif
}
ile umożliwia to program do kompilacji w środowiskach, które nie obsługują standardowe tematy, to jest bardzo CPU-intensywny jak program sprawdza nieustannie za stan czasu zamiast czekać aż to prawda.
Moje pytanie brzmi: czy istnieje mniej zasobochłonny sposób włączania tego zachowania "oczekiwania" przy użyciu tylko standardowego C++ (tzn. Nie zwiększania) w środowisku, które nie obsługuje w pełni wątków?
Nie o tym wiem, chyba że użyjesz 'sleep_until'. – chris
To będzie trudne. Jeśli możesz użyć doładowania, istnieje wiele funkcji oddzwaniania, które pozwoliłyby ci to łatwo zrobić. zobacz [tutaj] (http://stackoverflow.com/questions/4363458/timer-callback-in-c) –
Używałem 'select' na pustym fdsetce –