Tein tässä itselleni ajastimen ja nyt tahtoisin sen lopettavan itsensä suorituksen kun painaa jotain näppäintä näppäimistöstä. Eli miten toteutan hardware keskeytyksen?
Hakua saa käyttää. "Keskeytys" antaa tulokseksi esim. tämän: https://www.ohjelmointiputka.net/koodivinkit/
Windowsissa ei tietenkään toimi, DOS tarvitaan.
Auttaisiko jos antaisin lähdekoodin eli:
ajastin() { int tunnit, minuutit, sekunnit, tulos; printf("Mistä laskenta aloitetaan?\n"); printf("\nTunnit: "); scanf("%i", &tunnit); printf("\nMinuutit: "); scanf("%i", &minuutit); printf("\nSekunnit: "); scanf("%i", &sekunnit); if(sekunnit > 60) { tulos = sekunnit / 60; floor(tulos); sekunnit = sekunnit - (tulos * 60); minuutit = tulos + minuutit; } if(minuutit > 60) { tulos = minuutit / 60; floor(tulos); minuutit = minuutit - (tulos * 60); tunnit = tunnit + tulos; } printf("Ajastin alkaa ajasta %i h:%i min:%i s\n\n", tunnit, minuutit, sekunnit); //Tästä alkaa itse ajastin for(tulos = sekunnit + (minuutit * 60) + (tunnit * 3600); tulos >= 0; --tulos) { printf("%1d:%2d:%2d\t", tunnit, minuutit, sekunnit); if(sekunnit == 0) { if(minuutit == 0) { if(tunnit == 0) { break; } --tunnit; minuutit = 60; } --minuutit; sekunnit = 60; } --sekunnit; fflush(stdout); sleep(1); printf("\r"); fflush(stdout); } printf("\n"); main(); }
Ja nyt haluaisin lisätä tähän keskeytyksen, jonka avulla ajastin keskeytyy kun painaa näppäintä näppäimistöstä vai onnistukko tämä ylipäätään keskeytyksillä? En ole itse vielä kovin kokenut koodari.
Käytän Linuxia
Kyselisin vielä tästä, että osaakos kukaan?
Olisin varmasti vastannut jos osaisin. En ole koskaan kuitenkaan tarvinnut kyseistä ominaisuutta, joten en ole opetellut. Mutta Internetistä löytyy varmasti näppäimistönkäsittelyä C-kielessä koskevia sivuja. Hakukoneella voit varmaankin löytää jonkun helppokäyttöisen esimerkkikoodin jota voit soveltaa.
(n)cursesin getch() ja nodelay,noecho,cbreak:
http://www.apmaths.uwo.ca/~xli/ncurses.html#input
niin myöhästä että en jaksa itse penkoa ncursesia löytääkseen miten asia on siinä tehty.
No öö, ehkä linuxissa ei kannata millään keskeytysvirityksillä alkaa tollasta tekemään.
Enpä kyllä tiedä miten sitten.
Joops.. Eipä tämä paljon auttanut.
Aihe on jo aika vanha, joten et voi enää vastata siihen.