MFC 中关于CWinThread应用

来源:互联网 发布:本机连接虚拟机centos 编辑:程序博客网 时间:2024/05/16 17:23
看到题目大家应该知道我想谈谈这个方式创建线程。
        熟悉MFC的童鞋,不用多说对这个方式创建线程一定很熟悉了,这里说说这个方式创建线程的好处与坏处。
好处:
    1.不用自己控制信息传递队列
    2.不用自己去处理线程结束标志
    3.不用自己去调用各种锁去处理各种各种信息传递时的共享数据
坏处:
    1.不便于理解多线程复杂的控制原理及其安全工作方式
    2.容易忽略底层核心以及业务安全的处理
    3.会误将线程与创建对话框或者其他程序一样等同(结果导致利用按键一直创建线程)。
    4.线程内如果调用了(摄像头等硬件)却不知道如何安全的释放,结果导致程序不定期崩溃。
当然系统开发中导致程序崩溃不止多线程这一种麻烦,但是MFC提供的这个类给了大家方便的同时,却也留给了大家这么多陷阱,我们在利用这个开发的同时,需要依然利用好我前面日志中写到的一些处理技巧。
        当然这里也给大家简略的介绍下这个东西的用法。
        (1)先定义一个类继承CWinThread,然后我们进行各种消息的定义以及如何处理,就像你在MFC中添加自己定义的消息一样。
        #define WM_YOURMESSAGE    WM_USER+x 这个宏
        BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread)
ON_THREAD_MESSAGE( WM_YOURMESSAGE ,&CYOURThread::OnYOURMESSAGE)
END_MESSAGE_MAP()

        然后声明定义你的处理函数OnYOURMESSAG。

        (2)这样你只要在主线程的某个需要地方调用
        m_pYourThread = (CYOURThread*)AfxBeginThread(RUNTIME_CLASS(CYOURThread));
        这样就创建了你自己的线程,当然我们一般不能在按钮中去调用这个,有可能你用这个东西创建了很多次线程,当然如果你很清楚你为什么要这样做,你有足够的理由你也可以这么做。新手一般会范各种各样的错。
        
        (3)我们还要在某个地方来进行线程的安全退出,你也可以选择什么都不做,这样出现各种各样的崩溃都是有可能的。
          m_pYourThread ->PostThreadMessage( WM_QUIT, NULL, NULL );然后我们就可以退出了。