Android NDK 在线程内不打印

Posted

技术标签:

【中文标题】Android NDK 在线程内不打印【英文标题】:Android NDK does not print when inside thread 【发布时间】:2021-10-17 15:19:02 【问题描述】:

我正在使用包含以下功能的渲染器运行 GLSurfaceView:

    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    
        Engine.NativeMain();
        Engine.logicThread = new Thread(new Runnable() 
            @Override
            public void run()
            
                while(Engine.isRunning)
                
                    Engine.NativeUpdate();
                    try Thread.sleep(16); 
                    catch(InterruptedException e)  e.printStackTrace();
                
            
        );
        Engine.logicThread.start();
        GLES20.glClearColor(0, 0, 0, 1);

    

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height)
    
        GLES20.glViewport(0, 0, width, height);
    

    @Override
    public void onDrawFrame(GL10 gl)
    
        //By doing that, it is possible to save little battery when the renderer
        //is not dirty
        Engine.NativeRender();
    

如果我将 Engine.NativeUpdate 移到 onDrawFrame 上,则打印正常。但是在另一个线程中,它除了打印之外什么都做。我正在使用 __android_log_print 来完成该任务。在我的本机代码中,我保证我没有使用任何线程本地存储。

【问题讨论】:

【参考方案1】:

我没有记录任何内容,因为我保证我的游戏循环不在线程本地存储中。但我正在设置一个回调函数,它将调用 __android_log_print。那个回调是线程本地存储,所以它是空的,因此,没有被调用

【讨论】:

以上是关于Android NDK 在线程内不打印的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse、Android NDK、android.mk - 访问被拒绝

如何在 Android NDK 中使用 OpenCV BOWImgDescriptorExtractor?

Android Studio中的CmakeList NDK配置

android ndk调试C++ 代码怎么打印异常信息?

Mac下Android studio 之NDK配置教程

androi 多线程