Отмена запуска потока system () в macOS - PullRequest
1 голос
/ 06 марта 2020

У меня есть простая многопоточная функция, которая воспроизводит аудио в фоновом режиме, который я хотел бы убить. Выглядит это так:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...