-
Fototrend

Új hozzászólás Aktív témák
-
emitter
őstag
válasz
emitter
#1323
üzenetére
najó elég béna voltam, nem godnolkoztam
szóval müxik, de nem teljesen úgy ahogy én akarom:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
int
input_timeout (int filedes, unsigned int seconds)
{
fd_set set;
struct timeval timeout;
/* Initialize the file descriptor set. */
FD_ZERO (&set);
FD_SET (filedes, &set);
/* Initialize the timeout data structure. */
timeout.tv_sec = seconds;
timeout.tv_usec = 0;
// select returns 0 if timeout, 1 if input available, -1 if error.
return select (FD_SETSIZE,
&set, NULL, NULL,
&timeout);
}
int
main (void)
{
int i=0;
while(i<10)
{
if( input_timeout(STDIN_FILENO, 1) )
{
printf(''gomnyomas tortent '');
printf(''%d\n'',i);
i++;
}
else
{
printf(''%d\n'',i);
i++;
}
}
return 0;
}
ugyanis pl. 3 mp-ig várok, ok, számol 3-ig
aztán nyomok 1 entert, ekkor azt kéne kiírnia, h ''gomnyomas tortent 4''
majd kéne tovább számolnia, nem?
ehelyett ezt írja:
gomnyomas tortent 4
gomnyomas tortent 5
gomnyomas tortent 6
gomnyomas tortent 7
gomnyomas tortent 8
gomnyomas tortent 9
és mindezt 1 pillanat alatt, mintha már nem számolna a timeout
mit rontottam el
-
Jester01
veterán
válasz
emitter
#1323
üzenetére
azt mondtad h szedjem ki a temp_failure-t, hát kiszedtem, de így meg a select ha jól látom, nem is hívódik meg sehol
Persze, mert azt is kiszedted
Talán azt hagyd benne, a return-nel egyetemben.
return select (FD_SETSIZE, &set, NULL, NULL, &timeout));
Már most nem tudom hogyan magyarázzam, ha az elõzõt nem értetted.
Na még egy próba.
Nézzük onnan, hogy mit szeretnél:
1. Ha a felhasználó megnyom egy gombot, akkor arra reagálni akarsz.
2. Másodpercenként kiírni az idõt.
3. Közben nem terhelni a processzort.
A 3. pont miatt meg kell mondani az operációs rendszernek, hogy az 1. és 2. események bekövetkeztekor fusson a progi. Ezt például a select függvénnyel lehet, ami azt tudja, hogy figyel tetszõleges számú fájlleírót megadott ideig. Billentyûleütés akkor van, ha a stdin fájlból van mit olvasni. Ezt szépen meg lehet adni a select-nek. Sajnos azt viszont nem tudja, hogy másodpercenként térjen vissza akkor is ha nincs billentyûleütés, csak várakozási idõt lehet neki megadni. Ezért a 2. pontot kicsit át kell fogalmazni, mégpedig úgy, hogy nem azt mondod, hogy másodpercenként, hanem azt, hogy a következõ másodpercig. Ezt pedig úgy csinálod, hogy minden frissítésnél illetve a select meghívása elõtt lekéred az idõt (a gettimeofday függvénnyel, mert kell a pontosság!) és a timeout értéket ebbõl számolod, értelemszerûen: timeout = elõzõ frissítés + 1mp - aktuális idõ.
A select visszatérési értéke elárulja, hogy az 1. vagy a 2. feltétel következett-e be, vagyis a felhasználó megnyomott egy gombot (ekkor getch() és eseménykezelés) vagy pedig a várakozási idõ járt le (ekkor idõ frissítése kell.).
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Dobná a fizikai kezelőszerveket a Sony gamepad koncepciója
- Hyundai, Kia topik
- Telekom mobilszolgáltatások
- Mesterséges intelligencia topik
- Google Pixel topik
- Miskolc és környéke adok-veszek-beszélgetek
- 3DMark 11 eredmények
- Milyen CPU léghűtést vegyek?
- Nem tudom a dal címét, előadóját
- Real Racing 3 - Freemium csoda
- További aktív témák...
- Gamer PC: Ryzen 5 5600 I B550 WiFi6 I 16GB DDR4 I RX 590 8GB I 1TB NVMe I 1000W I HAF XB EVO
- Samsung 850 EVO 1TB Sata3 SSD / Beszámítás OK!
- Intel I7-7700K / Beszámítás OK!
- Új állapotban! Lenovo ThinkPad T14 Gen 3 i5-1245/16gb ram/256 ssd FHD+ garancia
- !AKCIÓ! GAMER PC Intel Core i9-10900X/ASUS ROG Strix X299-E Gaming/NVIDIA GeForce RTX 3080/32 GB RAM
- BESZÁMÍTÁS! MSI B460M 10400F 16GB DDR4 512GB SSD RX 6600XT 8GB Rampage SHIVA Cooler Master 650W
- HIBÁTLAN iPhone SE 2020 64GB White -1 ÉV GARANCIA - Kártyafüggetlen, MS4307, 100% Akksi
- BESZÁMÍTÁS! GIGABYTE Z370 i5 9600K 16GB DDR4 512GB SSD GTX 980TI 6GB ZALMAN S2 TG ADATA 600W
- 5G Lenovo ThinkPad P14s Gen 3 Intel Core i7-1280P Nvidia T550 32GB 1000GB 1 év teljeskörű garancia
- Svájci jellegű bicska eladó
Állásajánlatok
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs
Cég: Laptopműhely Bt.
Város: Budapest




