WinAPI timer - 50% spoždění? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

WinAPI timer - 50% spoždění? – C / C++ – Fórum – Programujte.comWinAPI timer - 50% spoždění? – C / C++ – Fórum – Programujte.com

 

uklizecka
~ Anonymní uživatel
2 příspěvky
4. 5. 2011   #1
-
0
-

Dobrý den,
následující kus kódu má vypisovat každou sekundu jeden řádek. Bohužel, pokud konstantu SYNC_FREQ_DEFAULT zvednu nad urcitou hranici (50, mozna i driv), vypis se zpomali o cca 50%.

#define SYNC_FREQ_DEFAULT 100 /* 100 Hz */

double machine_freq;
double sync_freq;

void alarm_handler(int data)
{

static int alarm_calls=0;

alarm_calls++;
if (alarm_calls == (int)sync_freq) {
printf("%d calls -> 1s\n", (int)sync_freq);
alarm_calls=0;
}
}


VOID CALLBACK t0_callback(HWND stejnejetonull, UINT message, UINT event_id, DWORD dword_timer)
{
alarm_handler(0);
}

int WINAPI WinMain(HINSTANCE curr, HINSTANCE prev, LPSTR cmdline, int n_show)
{
MSG msg;
UINT timer0;

init_blabla();

sync_freq=SYNC_FREQ_DEFAULT;

printf("wait == %d ms\n", 1000/(int)sync_freq);
timer0=SetTimer(NULL, 0, 1000/(int)sync_freq, t0_callback);
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

Buď je to způsobeno nějakou úplně blbou chybou, kterou nevidím, nebo už nevím.
S WinAPI teprve začínám. Pokud jsem pod Linuxovými systémy používal setitimer() a SIGALARM, všechno bylo v pořádku (a program dokonce něco dělal).

PS snad nevadí, že jsem psal na builder.cz, přijde mi tam celkem mrtvo - články nevycházejí..

Nahlásit jako SPAM
IP: 195.113.207.–
liborb
~ Redaktor
+18
Guru
5. 5. 2011   #2
-
0
-

Pokud se něco nezměnilo, tak pod nějakých 20-30ms se u timeru ve woknech nedostaneš.

Nahlásit jako SPAM
IP: 78.80.52.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 86 hostů

Podobná vlákna

Timer — založil petr143

Timer — založil

Timer — založil Nero

Timer — založil Grunt z Jupiteru

Timer — založil qwe

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý