本人对MFC不是很了解,因为大作业需要接触MFC界面编程,并涉及多线程问题,希望有大牛可以多解释一下,多谢!
我想实现的功能是:
1.利用OPENCV,通过摄像头对人手势进行实时跟踪识别,包括石头,剪刀和布三种手势(单独的手势识别跟踪程序无问题),其中,手势识别程序主要执行机构是一个while循环,大致代码如下:
while(capture) //capture为摄像头获取信号,此处为实时跟踪计算识别
            {
                     手势检测识别....
            }
此程序是独占CPU的,只要一开始就会不断在while循环中执行;
2.利用随机函数,随机生成1,2,3三个数中的一个,以此代表电脑猜拳结果;与手势识别程序没有任何数据交互;因为手势识别程序有独占特性,在循环检测过程中无法进行其他不相关的计算,所以我考虑到了多线程,之前在windows下面简单的使用过handle以及CreateThread函数,但是在MFC下使用工作线程或用户线程时(都尝试了一下),都遇到了启动手势识别线程之后无法进行其他操作的问题,我想问一下难道MFC窗口的多线程不是真正意义上的多线程吗?(我看到过有人说MFC窗口是单线程的,汗~~)。
我也想过其他许多打断手势检测途径,比如在电脑出拳线程中postmessage一个信号给手势识别线程,但是遇到了启动手势识别线程就无法执行电脑出拳线程的问题;也考虑过额外设置一个手势识别窗口,并设置一个on_clicked_button触发器来取消手势识别线程和窗口,但是尝试之后并不能打断while(capture)的执行,好顽强啊T.T,感觉我实现的好像并不是真正的多线程,还是单线程顺序执行。
看了cbNotes这位大大的博文,收益颇多,但是里面所述的用户线程,复制文件实际也是单任务单线程,只涉及到复制文件,新窗口只是更新显示复制文件的进度,所以怀疑MFC是否真的是多线程,cbNotes大大的博文地址:http://blog.csdn.net/cbnotes/article/details/8465212
哪位大大能帮我解决一下呢?或者提出一些新的解决方案,不甚感激!

解决方案 »

  1.   

    Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
      

  2.   

    线程 while 循环中适当 Sleep,  以让出CPU给其它线程
      

  3.   

    1. 首先,不要在主线程(也就是UI线程)中做CPU密集型的计算,否则你的程序必须卡死!不卡死的话,比尔都回来拜你为师。
    2. 需要理解worker线程和UI线程的区别,以及worker线程如何更新UI线程,否则你的程序要么卡死,要么crash。
    3. 算法的重要性。在CPU密集型的计算中,算法是很重要的,好的算法和差的算法有时会相差100%。当然,这都是理论建议。你没给出具体代码,咱也不可能给出具体建议。