首页 > 解决方案 > 在 GLSurfaceView 的 onTouchEvent 处理程序中使用 queueEvent

问题描述

我有一个关于在 GLSurfaceView 的 onTouchEvent 处理程序中使用 queueEvent 的问题。

相关代码如下所示:

@Override
public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX(); //in GUI thread
    float y = event.getY(); //in GUI thread
   
    queueEvent(new Runnable() {
        @Override
        public void run() {
            rotationAroundTwoAxes(x, y); //in OpenGL thread
        }
    });
}

我的问题是,由于变量 x 和 y 是在两个线程中访问的,我需要在它们之间进行同步吗?

标签: androidmultithreadingglsurfaceview

解决方案


我认为您不需要对该代码进行同步。

因为 GUI 线程不会读取那些 x 或 y。您的代码只是将具有 x 和 y 值的每个 onTouchEvent 排队运行。

如果 x 或 y 是全局变量,您可能需要将其同步(易失性等)。但是在您的代码中,它们只是本地和处置的。


推荐阅读