Wpis z mikrobloga

Pytanko. Chcę napisać program który jednocześnie nasłuchiwałby na porcie TCP i sprawdzał stan wejścia (przycisk). Jako że umieszczenie tego w jednej pętli byłoby niemożliwe i bezsensowne, jak to rozwiązać? I teraz: stworzyć dwa wątki i w każdym pętlę, czy linuks na RPi umożliwia obsługę (bo Uc pewnie takowe ma) jakiegoś rodzaju przerwania przy zmianie stanu wejścia?

#cpp #programowanie #raspberrypi
  • 6
@bartoneczek: http://man7.org/linux/man-pages/man2/select.2.html

Uniksowy select (polecenie C więc jest też w c++) pozwala zrobić to w 1 wątku w 1 pętli. Robisz pętlę while wykonującą select na tablicy 2 deskryptorów plików: standardowe wejście i gniazdo sieciowe, jak którykolwiek z deskryptorów ma coś do odczytania - select wraca i pozwala Ci zareagować.

Plus jest taki, że jest tylko 1 wątek zajęty i to w małym stopniu (select blokuje dopóki nie ma nic do
@bartoneczek: tylko pamiętaj, że domyślnie stdin buforuje klawisze, więc dopiero jak się wciśnie ENTER odczyta całą linię przez deskryptor pliku. Trzeba to jakoś zmienić jak chcesz każdy klawisz, nie pamiętam szczegółów.