In einem Multi-Thread-Linux-Programm für die serielle Kommunikation ist es möglich (und was wäre der beste Ansatz), eine blockierende read() -Aufruf von einem anderen Thread zu beenden?Linux, Cancel Blocking lesen()
Ich möchte alles so reaktiv wie möglich halten und die Verwendung von Timeouts mit wiederholten Abfragen vermeiden.
Der Hintergrund dieser Frage ist, dass ich versuche, eine serielle Scala-Kommunikationsbibliothek für Linux mit JNI zu erstellen. Ich versuche, die native Seite so einfach wie möglich zu halten, indem ich unter anderem eine read() und close() Funktion zur Verfügung stelle. Auf der Scala-Seite würde ein Thread read() aufrufen und blockieren, bis Daten von der seriellen Schnittstelle verfügbar sind. Der serielle Port kann jedoch auf andere Weise geschlossen werden, was zu einem Aufruf von close() führt. Um den blockierten Thread freizugeben, müsste ich den Systemleseanruf irgendwie abbrechen.
https://stackoverflow.com/questions/384391/how-to-signal-select-to-return-unmittelbar –