为什么系统调用(killall)在glfw,Mac,C ++中不起作用?

时间:2019-05-11 17:16:46

标签: multithreading system-calls kill glfw

我正在尝试在c ++中的Mac上伴随glfw窗口播放声音。我目前的方法是在单独的线程中发出系统调用(afplay)来播放声音,并在需要时在主线程中使用“ killall afplay”将其停止。

当前情况是,killall系统调用正在阻止主线程,并且glfw窗口没有响应。当按ctrl + c时,提示“找不到属于您的匹配进程”,并且killall系统调用返回256。该ctrl + c退出系统调用。再次按ctrl + c组合键,我们退出主线程。

类似的方法适用于linux计算机。

直接从终端发出afplay和killall命令可以正常工作。

1,当我在“位置0”处调用stop_sound()时,它可以工作(第一个二进制文件正在播放声音,第二个二进制文件运行时声音被杀死),所以我认为这与glfw有关。 / p>

2,当我在“位置1”处调用stop_sound时,它仍然会阻塞。

3,使用新线程停止声音甚至分离声音都没有影响

void play_sound(){
    system("afplay my_sound_file.wav");
}
void stop_sound(){
    system("killall afplay");
}
main(){ 

     //position 0 

     while (!glfwWindowShouldClose(window)) {
        if(gui.R_key_pressed() && !play_sound){
            std::thread audio(play_sound);
            audio.detach();
            play_sound = true;
        }

        if(gui.R_key_pressed() && play_sound){
            stop_sound();
            play_sound = false;
        }   
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    glfwTerminate();

    //position 1

    exit(EXIT_SUCCESS);
}

0 个答案:

没有答案