У меня есть простая многопоточная функция, которая воспроизводит аудио в фоновом режиме, который я хотел бы убить. Выглядит это так:
void
*music_thread(void *vargp)
{
t_lst *cl;
cl = (t_lst *)vargp;
cl->isoldmus = 1;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
system("aplay -f cd -t wav -q mymusic.wav");
return (NULL);
}
Я могу с легкостью отменить его на Linux с помощью:
pthread_cancel(cl->tid);
pthread_join(cl->tid, NULL);
Однако при том же коде, скомпилированном в macOS, поток не отменяется и программа ожидает окончания воспроизведения музыки c. Единственная разница в том, что команда system()
состоит в следующем:
system("afplay --volume 0.2 mymusic.wav");
Я мог бы использовать другой system()
- pkill
рабочий процесс afplay
, но я бы хотел этого избежать, если бы мог. pthread_kill()
тоже не сработало. Как я могу отменить это на macOS?
Я компилирую с помощью clang 10 на macOS Mojave и clang 9.0.1 на Gentoo Linux 4.19.97.