Es hängt sehr davon ab, wie Ihr Programm funktioniert, aber im Prinzip wäre es am einfachsten, wenn Sie weiterhin sleep und siehe ob der Benutzer das Lied geändert hat, bevor er diese Daten gesendet hat (nachdem der Ruhezustand zurückgekehrt ist). Anstelle von "versuchen Sie, besser zu schlafen" wäre das Ziel also "prüfen Sie vor dem Senden, ob die Daten, die Sie senden, wirklich gültig sind".
Eine andere Möglichkeit wäre, auf eine epoll
entweder mit der Zeitüberschreitung für den Schlaf oder besser noch mit einer timerfd
und benachrichtigen den Songwechsel über eine eventfd
. Dies hat den Vorteil, dass es "kostenlos" ist, wenn Sie ohnehin eine zuverlässige Kommunikation zwischen den Threads und eine Benachrichtigung über die Bereitschaft benötigen, was höchstwahrscheinlich der Fall ist (natürlich müssen Sie mindestens einen zusätzlichen GUI-Thread haben, da der Benutzer sonst nicht in der Lage wäre, die Songs zu wechseln, während Sie blockiert sind).