小编Mat*_*mus的帖子

线程在MVar操作中无限期地被阻塞

我一直试图在使用多个MVar时调试问题,但是没有运气.

我的代码使用两个MVar:一个用于存储服务器的当前状态,另一个用于向客户端线程传递网络事件.但是,在多次连接和断开连接后,服务器会在新客户端连接时停止发送数据(可能是因为网络事件MVar因任何原因而被清空)并最终因错误而跳闸: *** Exception: thread blocked indefinitely in an MVar operation

我在过去几天尝试调试此问题时得出以下结论:

  1. 用于修改MVar的函数不会抛出异常
  2. 在客户端连接或连接然后断开连接之前,不会发生此问题
  3. 问题似乎是随机发生的(有时几个客户端可以连接然后断开连接,有时它会立即发生)

我已将问题隔离到三个文件:

  1. https://github.com/Mattiemus/IMC-Server/blob/master/IMC.hs(抛出异常sense)
  2. https://github.com/Mattiemus/IMC-Server/blob/master/IMC/Networking/Server.hs(修改在application handleClient,和cleanupClient)
  3. https://github.com/Mattiemus/IMC-Server/blob/master/IMC/Utilities/Concurrency.hs(推送和弹出存储在MVar中的列表的函数)

我完全没有想法,因为我只使用modifyMVar和withMVar(所以它肯定永远不会完全留空) - 我唯一的假设是在修改MVar时可能会抛出异常,但我认为这是不太可能的.

任何帮助表示赞赏,这个问题一直困扰着我一段时间.

concurrency haskell network-programming

8
推荐指数
2
解决办法
1685
查看次数

在WebGL中使用gl_FragDepth

我正在用webgl编写3D应用程序,并且需要提供纹理中包含的我自己的深度数据,我当前的代码是这样做的:

VS:

    varying vec2 vUv;

    void main() {
        vUv = uv;
    }
Run Code Online (Sandbox Code Playgroud)

FS:

    uniform sampler2D depthTex;

    varying vec2 vUv;

    void main() {
        gl_FragDepth = texture2D(depthTex, vUv).r;
    }
Run Code Online (Sandbox Code Playgroud)

但是gl_FragDepth在opengl-es(和webgl)中被禁用了,无论如何以某种方式启用它,或者以任何方式提供我自己的深度数据而又不涉及渲染目标的繁重操作?

opengl-es webgl

5
推荐指数
1
解决办法
1780
查看次数

解锁手机后Android相机预览停止

我有一个Android项目的问题,我们的相机预览停止,但只有在手机被锁定然后解锁,它也无法拍照,这个问题让我真的难倒,我一直无法找到任何信息关于互联网上的这个错误,似乎正在做所有教程/其他堆栈溢出问题的状态:

@Override
protected void onResume() { 
    super.onResume(); 
    mPreview.setVisibility(View.VISIBLE); 
    //Open the default i.e. the first rear facing camera. 
    mCamera = Camera.open(); 
    try{ 
         mCamera.reconnect(); 
    } catch(Exception ex) { 
    } 
    mCamera.startPreview(); 
    cameraCurrentlyLocked = defaultCameraId; 
    mPreview.setCamera(mCamera); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    mPreview.setVisibility(View.GONE); 
    //Because the Camera object is a shared resource, it's very 
    //Important to release it when the activity is paused. 
    if (mCamera != null) { 
        mPreview.setCamera(null); 
        mCamera.stopPreview(); 
        mCamera.release(); 
        mCamera = null; 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

错误(拍照时)如下:

02-25 13:26:20.710: W/dalvikvm(17873): threadid=1: thread exiting with …
Run Code Online (Sandbox Code Playgroud)

java android android-camera

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