(学习笔记一)——CvWaitKey函数机制解析
来源:互联网 发布:人工智能机器人娇娇 编辑:程序博客网 时间:2024/06/07 10:09
首先,CvWaitKey函数源码如下:
CV_IMPL intcvWaitKey( int delay ){ int time0 = GetTickCount(); for(;;) { CvWindow* window; MSG message; int is_processed = 0; if( (delay > 0 && abs((int)(GetTickCount() - time0)) >= delay) || hg_windows == 0 ) return -1; if( delay <= 0 ) GetMessage(&message, 0, 0, 0); else if( PeekMessage(&message, 0, 0, 0, PM_REMOVE) == FALSE ) { Sleep(1); continue; } for( window = hg_windows; window != 0 && is_processed == 0; window = window->next ) { if( window->hwnd == message.hwnd || window->frame == message.hwnd ) { is_processed = 1; switch(message.message) { case WM_DESTROY: case WM_CHAR: DispatchMessage(&message); return (int)message.wParam; case WM_KEYDOWN: TranslateMessage(&message); default: DispatchMessage(&message); is_processed = 1; break; } } } if( !is_processed ) { TranslateMessage(&message); DispatchMessage(&message); } }}当CvWaitKey函数参数为0时,当执行到CvWaitKey(0)时,CvWaitKey内部进入循环,并处理CvNamedWindow函数产生窗口接收到的消息,如果是按键字符消息则退出CvWaitKey函数,并返回字符的ASCII码,否则将一直循环。
如果CvWaitKey函数的参数为数值,则等待响应的毫秒数,并处理CvNamedWindow创建窗口接收到的消息,响应过程同上,如果在等待时间结束,即使没有字符消息也退出CvWaitKey函数。
在上述代码中可以看出,其实CvWaitKey函数内部也能够处理其他窗口(非CvNamedWindow产生的窗口)接收到的消息,消息驱动机制类似于MFC本身的消息机制,并且调用MFC的消息响应函数执行。因此,可以通过将CvNamedWindow创建窗口与MFC自身窗口分别置于活动状态,就可以切换CvWaitKey去执行CvNamedWindow窗口接收消息或者是MFC窗口接收消息。
但CvWaitKey函数只有在有CvNamedWindow产生的窗口时,才能响应,否则相当于不执行(其实还是执行的,只不过是进入函数立即就退出了)。如果将CvNamedWindow窗口隐藏,就可以保证CvWaitKey只执行MFC窗口接收到的消息,这就可以使在有while(1)循环显示图像或视频的函数中不产生堵死,这也是一种在不使用多线程的情况下利用MFC以及OPENCV显示视频的方法。
此解释内容参考了帖子:http://blog.csdn.net/chenyusiyuan/article/details/4744097中新增功能后的代码,以及OPENCV中文论坛中的响应帖子http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=3324&sid=38e3f2d8fc86fabfe63f420d0b425159#p11433。
- (学习笔记一)——CvWaitKey函数机制解析
- OpenCv学习笔记一:图片加载不出来 imshow cvWaitKey(0)
- JavaScript解析机制——学习笔记
- Android学习笔记14——Broadcast机制(一)
- Android学习笔记— 事件处理机制(一)
- Android学习笔记— 事件处理机制(一)
- Android学习笔记— 事件处理机制(一)
- OPNET通信仿真机制解析——学习笔记
- Lua 学习笔记(四) —— 函数(一)
- C++ Primer 学习笔记——函数(一)
- Theano学习笔记(一)——scan函数
- cvWaitKey函数说明
- cvWaitKey函数说明
- C++ Primer学习笔记(14)——虚函数的实现机制、纯虚函数
- underscore学习笔记—集合函数/collections(一)
- underscore学习笔记—对象函数/Objects(一)
- OpenCV程序运行错误(3)—cvWaitKey()
- windows内部机制学习笔记(一)
- wp7加载XML文件,处理加载的xml为pointer为null的报错
- 你招聘设计师时都问哪些问题?你是怎么招聘设计师大牛的?
- Java中的输入输出流
- IE中使用并且安全级别为低级时!javascript可以获取客户端电脑MAC地址
- NYOJ 467 中缀式变后缀式
- (学习笔记一)——CvWaitKey函数机制解析
- js当滚动条拉到最下端,触发事件代码
- 一道网易笔试题目-几何相关
- C++STL之list用法总结
- iforum 3这个开源论坛,有人用过吗?如何安装?
- 黑马程序员--学习--注解和泛型
- zoj:1456Minimum Transport Cost
- struct termios 结构体
- eclipse 配置Tomcat服务器Server Locations