小编mat*_*jda的帖子

在快速暂停/恢复应用程序时,在Android NDK中使用SurfaceView崩溃

当我暂停/取消暂停我的应用程序时,我遇到以下问题:

E/BufferQueueProducer(  177): [SurfaceView] connect(P): already connected (cur=1 req=1)
E/libEGL  (25863): eglCreateWindowSurface: native_window_api_connect (win=0xb4984508) failed (0xffffffea) (already connected to another API?)
E/libEGL  (25863): eglCreateWindowSurface:416 error 3003 (EGL_BAD_ALLOC)
Run Code Online (Sandbox Code Playgroud)

我很确定我正在停止/正确启动我的渲染线程这个问题真的只发生在我非常快地暂停/恢复应用程序时(比如当你混合打开应用程序按钮时).

任何想法可能是eglCreateWindowSurface在这里返回EGL_NO_SURFACE的原因?我猜这将与仍然连接到SurfaceView的东西有关.

android opengl-es surfaceview android-ndk

6
推荐指数
1
解决办法
3740
查看次数

在C++中推断lambda的模板类型

我必须上课:

template<typename T>
class SafeCallback
{
public:
    typedef std::function<T> FunctionType;
    SafeCallback(std::shared_ptr<bool> is_valid, FunctionType callback)
        : is_valid_(is_valid), callback_(callback)
    {
    }

    template <class ...Arg>
    void operator()(Arg&&... parameters)
    {
        if ((*is_valid_) == true)
        {
            callback_(std::forward<Arg>(parameters)...);
        }
    }

private:
    std::shared_ptr<bool> is_valid_;
    FunctionType callback_;
};
Run Code Online (Sandbox Code Playgroud)

要使用lambda作为回调来构造这样的对象,我可以这样做:

SafeCallback<void(int)>(guard, [] (int value) { /* Do sthing */ });
Run Code Online (Sandbox Code Playgroud)

但我想,C++应该有一种方法来推断SafeCallback使用工厂方法的类型参数.如果我创建这样的方法:

template<typename T>
SafeCallback<T> makeSafe(std::shared_ptr<bool> is_valid, std::function<T> callback)
{
    return SafeCallback<T>(is_valid, callback);
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于lambdas,只有我通过了std::function.有任何想法吗?

c++ lambda templates generic-programming c++11

2
推荐指数
1
解决办法
751
查看次数