我正在尝试为我的程序创建一个C ++包装器来使用GStreamer。
所以我创建了一个Class“Audio”,其方法是“play”,它启动一个流。由于在其中调用g_main_loop_run
,因此在主循环退出之前不会返回。
我不想要这种行为,因此我试图在async
方法中对play
方法进行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
但结果是程序没有响应......调用djan_web\
manage.py
djan_frontend\
views.py
templates\
djan_frontend\
upload.html
djan_homepage\
index.html
djan_web/
urls.py
方法(打印cout),播放开始并继续播放,但GUI变得完全没有响应,只能是通过杀死程序退出。
你对我有任何帮助吗?
问候,tagelicht
答案 0 :(得分:2)
异步返回未来和未来必须在超出范围时完成(等待结果)。
它与使用async(...);
完全相同,因为句柄在分配之后超出了范围。