C ++异步使程序无响应

时间:2016-08-22 13:38:57

标签: c++ asynchronous gstreamer

我正在尝试为我的程序创建一个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

1 个答案:

答案 0 :(得分:2)

异步返回未来和未来必须在超出范围时完成(等待结果)。 它与使用async(...);完全相同,因为句柄在分配之后超出了范围。