Ok, evo programcica - znaci ovo radi pod Win32 konzolom i sljaka sasvim lepo, mada ima neke mane (asinhrono citanje tastature, moze da se zagubi nesto u baferu ako krenes rafal po enteru)
E, sad - ovaj program koristi nekoliko Win32 API f-ja:
GetAsyncKeyState() - asinhrono citanje statusa nekog tastera
CreateThread() - kreira nit
GetTickCount() - cita broj milisekundi od startovanja OS-a
Da bi ovo proradilo kao Posix(R) (tj na svim OS-evima) moras ove API funkcije zameniti ekvivalentnim. Ja cu ti pomoci za jednu - CreateThread moze da se zameni sa _beginthread() koja je Posix i NT i Linux je imaju implementiranu (tj CRT library)
Inace, ne znam koliko si upucen u sistemsko programiranje, ali nit (thread) ti je deo programa koji se paralelno izvrsava sa ostatkom - znaci u ovom programu imas dve niti - glavnu (tj. main() ) i jos jednu koja samo skenira tastere. Obe niti rade u isto vreme - i da bi ovaj program bio malo pametniji moras uvesti i neku komunikaciju izmedju niti, ali to vec nije deo problema...
PS: da, ovo i ne mora da bude multithread aplikacija, sve iz ScanThread() mozes da stavis i u main() ali u tom slucaju program moze samo da skenira tastaturu i nista vise. Pretpostavljam da tvoj prog treba i nesto drugo da radi osim da ceka da neko pritiska enter :)
Code:
#include <windows.h>
#include <stdio.h>
void ScanThread()
{
int last_enter_time = 0;
do {
if(GetAsyncKeyState(VK_RETURN)&0x8000) {
/* enter je pritisnut */
if(last_enter_time!=0) {
float duration = (float)(GetTickCount() - last_enter_time);
duration /= 1000.0f; // konvertuj msec u sec
printf("Interval izmedju 2 entera je bio: %f Sekundi!\n\n", duration);
}
last_enter_time = GetTickCount();
}
/* inace, ne radi nista - ili ispitaj neki uslov za izlaz odavde */
// ...
Sleep(50); /* obavezno, bez ovoga bi ti ova nit zauzela 100% CPU time */
} while(1);
}
void main()
{
HANDLE thd;
DWORD tid;
/* kreiraj nit */
thd = CreateThread(NULL,8192,(LPTHREAD_START_ROUTINE)ScanThread,(LPVOID)NULL,NULL,&tid);
/* odavde tvoj program nastavlja da radi normalno, dok se u pozadini vrti scan */
for(;;) {} // i nikad ne zavrsava, ako ostavis ovo ;)
}
[
Ovu poruku je menjao Ivan Dimkovic dana 20.10.2001 u 08:42 AM GMT]
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos:
http://www.digicortex.net/node/17 Gallery:
http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! -
https://github.com/psyq321/PowerMonkey