[C] Uruchamianie funkcji co jakiś czas

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.

Proszę się przyjrzeć tutaj

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.