gpt4 book ai didi

C++ 异步使程序无响应

转载 作者:行者123 更新时间:2023-11-30 03:39:01 25 4
gpt4 key购买 nike

我目前正在尝试为我的程序创建一个 C++ 包装器以使用 GStreamer。

所以我创建了一个类“Audio”,其方法是“播放”以启动一个流。由于在其中调用了 g_main_loop_run,直到主循环退出后它才会返回。我不想要这种行为,因此我试图在 play 方法中对另一个方法进行 async 调用,然后启动主循环并允许 play 方法返回。

目前看起来是这样的:

    void play(const char* uri) {
stop();

if (uri) {
g_object_set(G_OBJECT(pipeline), "uri", uri, NULL);
} else {
cout << "Please specify an URI you wish to play" << endl;
return;
}
gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING);

auto handle = async( launch::async, &Audio::playAsync, this, uri);
}

void playAsync(const char* uri) {
cout << "playing async" << endl;
g_main_loop_run(this->getLoop());
}

但结果是程序变得无响应... playAsync 方法被调用(它打印 cout),播放开始并继续播放,但 GUI 变得完全无响应并且只能通过杀掉程序退出。

你对我有什么帮助吗?

问候,tagelicht

最佳答案

Async 返回 future 并且 future 在超出范围时必须完成(它等待结果)。这与仅使用 async(...); 完全相同,因为句柄在分配后立即超出范围。

关于C++ 异步使程序无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39081114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com