<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    用戶界面線程AfxBeginThread的使用

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    用戶界面線程在運行時會有一個窗口界面和與其相對應的窗口函數,所以它可以通過響應消息來和用戶進行交互。

    AfxBeginThread 函數原型如下:

    CWinThread *AfxBeginThread( 
        CRuntimeClass *pThreadClass,         //從CWinThread派生的RUNTIME_CLASS類  
        int  nPriority /* = THREAD_PRIORITY_NORMAL */ ,      //指定線程的優先級  
        UINT nStackSize /* = 0 */ ,                //定義新線程的堆棧大小  
        DWORD dwCreateFlags /* = 0 */ ,     //為控制線程創建的附加標志  
        LPSECURITY_ATTRIBUTES lpSecurityAttrs /* = NULL */     //指定線程的安全屬性  
    ) 

    用戶界面線程必須包含有消息循環,以便可以處理用戶消息。要使用用戶界面線程,必須派生自CWinThread 類一個線程類,而且一般要重寫類的InitInstance ()和ExitInstance ()函數。

    示例:編寫一個應用程序,當用戶在程序主窗口按下鼠標左鍵時,會啟動一個用戶界面線程。當用戶在線程窗口界面按下鼠標左鍵時,會彈出一個信息框。
    1.新建單文檔程序;
    2.單擊菜單欄“項目”→“添加類”→“MFC類”,基類選擇“CWinThread ",類名輸入CMyThread,點”完成“,同時以類似步驟以CFrameWnd類為基類派生CMyWnd 類;
    3.在視圖類實現文件包含頭文件:

    #include  "MyThread.h" 

    4.在CMyThread類實現文件中包含頭文件:

    #include  "MyWnd.h" 

    5.在CMyThread::InitInstance()中創建線程中的窗體:

    BOOL CMyThread::InitInstance() 

        CMyWnd *pFrameWnd = new  CMyWnd(); 
        pFrameWnd->Create(NULL, _T("Thread Windows" )); 
        pFrameWnd->ShowWindow(SW_SHOW); 
        pFrameWnd->UpdateWindow(); 
        return  TRUE; 
    } 

    6.在CMyWnd類中修改構造函數CMyWnd() public 屬性,然后實現鼠標左鍵消息響應函數:

    void  CMyWnd::OnLButtonDown(UINT nFlags, CPoint point) 

        LPTSTR pMessage = _T("This is a window thread" ); 
        CWnd *pMainWnd = AfxGetMainWnd(); 
        ::MessageBox(NULL, pMessage, _T("Thread Message" , MB_OK)); 
        CFrameWnd::OnLButtonDown(nFlags, point); 
    } 

    7.在應用程序視圖類中實現鼠標左鍵響應函數:

    void  CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point) 

        AfxBeginThread(RUNTIME_CLASS(CMyThread)); 
        CView::OnLButtonDown(nFlags, point); 
    } 

    程序運行結果:

    RFID設備管理軟件

    這里要注意的是,這個用戶界面不是屬于主框架窗口的,可以說是和主線程窗口并列的。通過查看桌面任務欄就可以發現,兩個窗口并行著顯示,而且互相不影響。注意上面給出的代碼MessageBox 是引用API的,并且是無窗口,所以這里有三個并行的窗口,而且各不干擾。單獨關閉用戶界面線程的窗體,可以正常退出用戶界面線程。但是如果直接關閉了主線程窗體,那么用戶界面線程就會非法關閉,造成內存泄露。

    RFID設備管理軟件

    對于用戶界面線程的正常退出,只要在用戶界面線程內調用PostQuitMessage 即可,參數為0的話,代表成功完成。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全