Mam kod w którym co jakiś czas (np. 30 sekund) potrzebuje sprawdzać parametry komputera. Mam funkcję która się tym zajmuje. Jak wywoływać funkcję co X czasu, gdy główny program robi obliczenia?
Musisz użyć jakiejś biblioteki (teoretycznie jest C11, ale to zbyt nowa rzecz). Dla przykładu taka bibliotaka GLib ma funkcję g_timeout_add http://developer.gnome.org/glib/stable/ … imeout-add . Możesz też użyć praktycznie dowolnej biblioteki wątków i w nowym wątku wywoływać funkcję i po niej usypiać wątek na zadany czas (GLib ma wątki).
… albo jak ci nie zależy na tym że program pomiędzy odpaleniami i tak będzie zużywał 100% mocy jednego procesora to pętla porównująca to co zwróci time();
int main()
{
time_t X=time(0);
while(true)
{
time_t N=time(0);
if(N>X)
{
cout<<"czas"<
X=N+30;
}
}
}
Wystarczy użyć funkcji Sleep.
while (true)
{
RóbCoś();
Sleep(10000); // 10 * 1000 milisekund
}
Po prostu usypia ona wątek na zadany czas.
Rzecz w tym, że Sleep uśpi całość, a on chce w czasie gdy ta funkcja nie jest uruchomiona wykonywać inne operacje.
CreateProces tak samo jak Sleep to niezbyt kompatebilne wynalazki - pod unixem nie pójdzie.
Jeżeli już bawić się w wątki to polecam pthread: http://pubs.opengroup.org/onlinepubs/00 … ead.h.html
@[alex]: srsly, kogo, kto pyta się o to jak wywołać f-cję co jakiś czas obchodzi, czy to działa pod uniksami czy nie*? Dajmy ludziom nauczyć się podstaw, tego “jak to działa” pod spodem, a nie narzucajmy kolejnych warstw abstrakcji. Jeśli będą potrzebowali rozwiązania “uniwersalnego”, to będą wiedzieć czego szukać przynajmniej.
* - powiem więcej, wielu osobą to nie jest w ogóle potrzebne, bo nie celują w wiele systemów naraz albo już używają czegoś, co załatwia to za nich(vide Java, .NET czy wspomniane pthreads i inne wieloplatformowe biblioteki).
Fiołek , generalnie to się z tobą zgadzam, tylko że autor tematu nie powiedział czy to pod windows czy pod linux, więc nie wiadomo czy mu tamte odpowiedzi pasują.
Description_1 , skoro się nie domyślasz to _sleep() z kolei nie zadziała pod Windows. Osobiście wole rozwiązania które będą działać niezależnie od platformy.