Portál AbcLinuxu, 10. května 2025 04:41
Ahoj, snazim se najit chybu ve svem programu, ale jelikoz se jedna o praci se signaly, s kterymi nemam zadne zkusenosti, tak jsem vytvoril chybu, s kterou nevim jak dal. Chyba je vypreparovana v prilozenem kodu.
Je zde inicializovana seriova linka s parametry komunikace: 9600 Baudu, bez parity, 8 datovych bitu, 1 stop bit, zadne flow control.
Pokud spustim tento program, tak bych cekal, ze se vypise hlaseni o startu, pak se 30 vterin pocka a pak se skonci, pripadne ze se obcas vypise "obsluha signalu". Takhle to ale funguje pouze dokud se na seriove lince neobjevi nejaka data. Chovani se potom lisi podle toho, zdali pouzivam boost::this_thread::sleep nebo jen sleep:
1) boost::this_thread::sleep prerusi cekaci smycku vzdy po prijeti 5teho znaku.
2) "obycejne" sleep prerusi tuto smycku okamzite po prijeti prvniho znaku.
Problem je, ze nevim proc se tomu tak deje, a hlavne ze nechci aby se tak delo.
Dekuji za radu!
man 7 signal ...
The sleep(3) function is also never restarted if interrupted by a handler, but gives a success return: the number of seconds remaining to sleep.
Osobne ovsem preferuji select/poll, signalum se radsi vyhybam.
Diky moc! Skoda ze tahle veta vypadla z ceskyho prekladu.
Neporadil bys mi nejakej tutorial k select/poll? Ze samotnyho manu moc moudry nejsem.
nejakej tutorial k select/poll
Pokud by stačily podklady k přednášce, tak v Programování v Unixu je k tomu něco na stránkách 188-191.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.