目前,我的程序中有两个线程在运行:
当我运行我的程序时,它在崩溃之前工作了很短时间,只有以下例外:
0xC000005: Access violation reading location 0x0000000我认为这是因为我的服务器线程试图与主线程同时访问映像。
我以前没有做过任何并发编程(这是我第一次),但是我现在对如何解决这个问题有一个模糊的想法。
我的计划是设置某种锁,以防止服务器准备将映像发送到客户端时从主线程访问映像。然而,我意识到,在客户端不断请求新框架时,服务器线程不断地保存资源可能会出现问题。因此,我想,只有当一个新的框架从网络摄像头抓取时,才能响应客户端,以避免上述阻塞问题。
总括而言:
主螺纹:
1. If Image is available
then - Lock image, copy over new data from webcam, release image
else - goto 1
2. Do processing服务器:
1. Receive request for new frame from client
2. If (haven't sent the current frame yet)
then - Lock CVD image access, send over frame, release image.
else - wait until new image available.
3. goto 1我的问题是,这是否一个合适的解决办法?为了实现这一点,我需要什么呢?也就是说,当另一个线程正在执行自己代码的一部分时,我如何停止执行代码的某些部分。
更多信息:
发布于 2012-03-17 17:13:30
我会使用一个循环缓冲区,这样我就可以在向客户端写入另一个框架时读取一个框架,前提是您不想删除框架。
查看http://msdn.microsoft.com/en-us/library/windows/desktop/ms682530(v=vs.85).aspx获取有关Windows关键部分的信息。
最后,如果您有现有的代码,为什么不能打开调试信息并重新构建呢?否则你就会在黑暗中开枪,试图找出这次坠机的原因。
发布于 2012-03-17 17:33:20
如何在另一个线程正在执行自己代码的一部分时停止执行代码的某些部分?
同步将由管道本身完成--如果您在客户端调用ReadFile()1 1,它将暂停其执行,直到有一些数据通过它。
在MSDN上有管道服务器和客户端的示例实现。也许能帮上忙。
我指的是不重叠的电话
https://stackoverflow.com/questions/9751869
复制相似问题