I’m building scrobbler, and I want my program to wait 10 seconds after song change, before scrobbling. I have been using sleep but I realized that if song change during these 10 seconds, program submit old song and get new one. I want If I change song, code start all over again.
I’m using Music Player Daemon (MPD) and libmpd to get songs’ tags.
Note: program is under Unix.
It depens a lot on how your program works, but in principle, the easiest way would be to keep using sleep and check whether the user changed the song before sending out that data (after sleep has returned). So, instead of “try to sleep better”, the goal would be “check that the data you send is really valid before sending”.
A different possibility would be to wait on an
epollusing either the timeout for sleeping or better yet on atimerfd, and notify song change via aneventfd. This has the advantage that it is “free” if you need reliable inter-thread communication and readiness notification anyway, which you most probably do (obviously you must have at least one additional GUI thread, or the user would not be able to change songs while you’re blocking).