我目前在我的程序中运行了两个线程:
主线程 - 从网络摄像头抓取图像,存储在CVD图像中。是否对此图像进行处理。
服务器线程 - 使用命名管道将存储在上述CVD映像中的完整图像数据发送到其客户端。
当我运行我的程序时,它会在崩溃之前运行很短的时间,并出现以下异常:
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
我的问题是,这是一个合适的解决方案吗?为了实现这个,我需要什么?即,当另一个线程正在执行其自己的代码的一部分时,如何停止执行我的代码的某些部分。
更多信息:
答案 0 :(得分:1)
我会使用循环缓冲区,因此我可以在向客户端写入不同的帧时读取一帧,假设您不想丢帧。
请查看http://msdn.microsoft.com/en-us/library/windows/desktop/ms682530(v=vs.85).aspx以获取有关Windows Critical Sections的信息。
最后,如果您有现有代码,为什么不能打开调试信息并重建?否则你会在黑暗中拍摄,试图找到造成这次事故的原因。
答案 1 :(得分:0)