Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Spuštění funkce v určitý čas

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Spuštění funkce v určitý čas

Autor: Jaroslav Šmíd

21:38:44 20.11.2011

Na rychlo jsem něco spatlal, nějak to i funguje :D Pokud počítač uspíš a následně probudíš, tak pokud probudíš před daným časem, tak se správně počká, pokud až po daném čase, provede se akce po probuzení. Nezkoušel jsem, co se stane, pokud změníš čas, to je na tobě.
[code]
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char **argv)
{
int timerfd;
struct itimerspec old_value;
struct itimerspec value;

time_t time_started, time_finish, time_finished;

timerfd = timerfd_create(CLOCK_REALTIME, 0);

if (timerfd == -1) {
printf("timerfd_create failed\n");
exit(1);
}

time_started = time(NULL);
printf("Time started: %s\n", asctime(localtime(&time_started)));
time_finish = time_started + 60*3; // za 180s
printf("End time: %s\n", asctime(localtime(&time_finish)));

value.it_interval.tv_sec = 0;
value.it_interval.tv_nsec = 0;
value.it_value.tv_sec = time_finish;
value.it_value.tv_nsec = 0;

if (timerfd_settime(timerfd, TFD_TIMER_ABSTIME, &value, &old_value) != 0) {
printf("timerfd_settime\n");
close(timerfd);
exit(1);
}

uint64_t val;
ssize_t rd;

rd = read(timerfd, &val, sizeof(val));
if (rd != sizeof(val)) {
printf("read failed\n");
close(timerfd);
exit(1);
}

time_finished = time(NULL);
printf("Finished: %s\n", asctime(localtime(&time_finished)));

close(timerfd);

return 0;
}
[/code]

Probuzeno po uplynutí doby:
[code]
Time started: Sun Nov 20 21:28:26 2011

End time: Sun Nov 20 21:31:26 2011

Finished: Sun Nov 20 21:32:33 2011
[/code]

Více info viz manuálová stránka timerfd_create

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: guest

6:17:06 25.05.2011

http://unixhelp.ed.ac.uk/CGI/man-cgi?at

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: xyz3

20:41:24 15.03.2011

To netuším, musíš si to vyzkoušet.

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: frca

19:53:08 15.03.2011

K těmto dvěma fcím: Co se stane, když v době, kdy se má provést akce, je počítač právě uspaný?

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: xyz3

15:00:56 15.03.2011

Aha, pak zkus timer_create a timer_settime.

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: frca

14:34:44 15.03.2011

S tím uspáním jsem to myslel spíš tak, že třeba uspím počítač, nechám ho 10 minut spát, pak ho probudím, funkce usleep běží dál, jako by se nechumelilo. Tudíž běží o 10 minut déle a neskončí v dobu, kdy to potřebuji, ale později.

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: xyz3

13:27:44 15.03.2011

Tak už to tam snad je, podívej se na tohle, ale nemám to vyzkoušeno:

/sys/class/rtc/rtc0/wakealarm

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: xyz3

13:19:41 15.03.2011

Na Linuxu IMHO neexistuje pokročilá funkce na ovládání ACPI na probouzení PC z S3/S4 ve stanovený čas a proto dotaz nemá řešení. (Pokud to tam už dopsali, tak mě zajímá bližší info). Obecně to ale řešitelné je, na některých jiných OS to funguje, PC se probudí na základě požadavku programu.

Citovat příspěvek

 

Re: Spuštění funkce v určitý čas

Autor: V_S

11:09:07 15.03.2011

Ano je, použít systémový časovač CRON, který funguje, pokud není PC vypnuté, pak ale asi nefunguje nic. Tu funkci bych pak ale odseparoval do zvláštního programu nebo volal pomocí parametru původního programu.

Citovat příspěvek

 

Spuštění funkce v určitý čas

Autor: frca

11:02:03 15.03.2011

Zdravím,
jaký je nejlepší způsob pro spouštění funkce (u programu, který běží pořád) v několik hodin (například v poledne)? Něco už jsem vytvořil, ale je to poměrně kostrbaté - pomocí funkce usleep čekám, než uběhne čas, který zbývá do času, kdy chci spustit funkci. Stačí však, abych například uspal počítač, a už to nefunguje. Není nějaké lepší řešení?
Díky,
frca

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: