如何在C語言中使用multithreading運行音樂和游戲?

我正在嘗試在我的raycaster-type游戲中運行音樂,該游戲使用xwindows協議。我讀了一些關于multithreading的教程,但我不確定我是否明白。

我創建并執行了我的兩個threads,如下所示:

pthread_create(&song, NULL, ft_sound, NULL);
pthread_create(&dance, NULL, ft_go, &mega);
pthread_join(dance, NULL);
pthread_join(song, NULL);

其中ft_sound是運行音樂的函數,ft_go是運行raycaster的函數,mega是存儲我所需的全部內容的結構。

以下是所討論的功能:

static void *ft_sound(void *vargp)
{
    (void)(vargp);
    sleep(10);
    execlp("aplay", "aplay", "-q", "./music.wav", NULL);
    return (NULL);
}
static void *ft_go(void *vargp)
{
    t_mega  *mega;

    mega = vargp;

    mega->win = mlx_new_window(mega->mlxp, mega->map.res[0], mega->map.res[1], "CUB3D");
    ft_raycast(mega, &mega->eng, &mega->map, -1);
    mlx_hook(mega->win, 3, 3, ft_key_press, mega);
    mlx_loop(mega->mlxp);
    ft_free_map(&mega->map);
    return (NULL);
}

(mlx函數是我學校為這次約會定制的函數,它們處理game.的按鍵)

但只要歌一開始,舞蹈就結束了,即使我交換了連接線。如何使我的threads同時運行?

? 最佳回答:

execlp("aplay", "aplay", "-q", "./music.wav", NULL);

aplay的實例替換整個可執行文件(不僅僅是當前的thread)。因此,一旦調用execlp,光線跟蹤thread就消失了。

如果您需要提供multithreaded解決方案,那么您必須找到一個庫,它可以在不調用外部實用程序的情況下播放音樂。或者,您可以只派生一個單獨的進程來執行aplay。(混合threads和叉子是可能的,但要小心一點。但似乎沒有任何必要here.)

主站蜘蛛池模板: 一区二区三区日韩精品| 亚洲国产欧美一区二区三区| 国产乱人伦精品一区二区在线观看 | 日本片免费观看一区二区| 成人精品视频一区二区三区尤物| 香蕉久久av一区二区三区| 亚洲一区二区三区高清在线观看| 国产高清在线精品一区小说| 无码一区二区三区老色鬼| 久久精品日韩一区国产二区 | 日韩精品无码Av一区二区| 亚洲国产成人久久综合一区| 激情综合一区二区三区| 在线观看国产一区二区三区| 亚洲国产韩国一区二区| 国产伦理一区二区| 日韩精品在线一区二区| 日韩少妇无码一区二区三区| 无码精品不卡一区二区三区| 久久精品国产亚洲一区二区| 中文字幕一区在线播放| 熟女大屁股白浆一区二区| 中文字幕一区二区三区乱码| 国模无码视频一区| 国偷自产视频一区二区久| 一级特黄性色生活片一区二区 | 国产精品免费大片一区二区| 精品中文字幕一区在线| 丰满人妻一区二区三区视频| 日韩视频在线一区| 中文人妻无码一区二区三区| 无码人妻精品一区二区三区东京热| 国模吧一区二区三区| 亚洲av无码片区一区二区三区| 精品国产一区二区三区不卡| 免费高清在线影片一区| 曰韩精品无码一区二区三区| 久久久久久人妻一区二区三区 | 熟女精品视频一区二区三区| 日本一区二区三区不卡视频| 蜜桃视频一区二区三区|