[C] Uruchamianie funkcji co jakiś czas


(Krzychu224) #1

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?


(Sawyer47) #2

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).


([alex]) #3

.. 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;

        }

     }

  }

(Michalo2882) #4

Wystarczy użyć funkcji Sleep.

while (true)

{

    RóbCoś();

    Sleep(10000); // 10 * 1000 milisekund

}

Po prostu usypia ona wątek na zadany czas.


(Hixohe) #5

Rzecz w tym, że Sleep uśpi całość, a on chce w czasie gdy ta funkcja nie jest uruchomiona wykonywać inne operacje.


(Dawidfajkowski) #6

Proszę się przyjrzeć tutaj


([alex]) #7

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


(Fiołek) #8

@[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).


([alex]) #9

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ą.


([alex]) #10

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.