Timer   otázka

C++/C

Dobrý den,

narazil jsem na problém opakování kódu každých x sekund, v .NET pro tyto potřeby máme třídu Timer, v C++ ale nic takového není.

Moje otázka tedy zní, je tento kód vhodný jako timer? Jestli něco blokuje není důležité, program by měl stejně vykonávat pouze tuto f-ci.

#include <windows.h>

void Timer(int milliseconds)
{
   //Provedení kódu, který se má provést každých x sekund

   Sleep(milliseconds); // Počká x vteřin
   Timer(); //Funkce zavolá sama sebe.
}

int main(int argc, char **argv)
{
   Timer(2000); // Zavolání funkce
}

Je tato funkce dostatečně rychlá a spolehlivá? Nezpomaluje jí ta rekurze? Díky za všechny odpovědi.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Naprostá příšernost, která po nějaké době povede k přetečení zásobníku. V C++ nedělám, ale Timer známý z Windows Forms musí zcela jistě být v MFC, nebo v nejhorším případě Windows API.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Souhlasím s tím, že to je příšernost, zásobník ale nepřeteče, protože rekurzivní volání je až na konci metody a nemění stav volající metody - tzn provede se tailcall, tj. aktivační záznam se zruší ještě před rekurzivním voláním, protože už není potřeba.

Každopádně takhle se to určitě nedělá, na něco jako timer existuje WinAPI funkce, hledejte na MSDN. Buď rozjedete standardní frontu zpráv a odchytíte si WM_TIMER, nebo bude určitě i jiná možnost.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za odpovědi, tak trochu jsem si myslel, že to asi nebude úplně ono, ale radši jsem se zeptal. Zkusím se podívat na ten WM_TIMER. Díky!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback