Q:CCriticalSection是什么?
A:CCriticalSection是一種線程同步策略 或者說技術 或者方法 總之呢就是這么個意思。。。。
參考資料:
http://blog.csdn.net/akof1314/article/details/5773076
http://www.cnblogs.com/hlxs/archive/2013/03/31/2991752.html
http://baike.baidu.com/view/2471016.htm
第一步:打開VS2010 創建一個單文檔MFC程序。並運行 確定創建過程OK
第二步:在視圖類頭文件里面添加頭文件#include "afxmt.h"
並在視圖類的實現文件里面實例化一個CCriticalSection對象。
特別說明這個對象不屬於視圖類,此處是將其定義為一個全局變量。
CCriticalSection Gsz_CriticalSection;
第三步:在視圖里的實現文件里面 定義這兩個函數。這兩個函數帶回會被指定為線程函數。這兩個函數不是視圖類的成員函數。
UINT MessageThread1(LPVOID pParam)
{
Gsz_CriticalSection.Lock();
LPTSTR pMessage = _T("Thread1 is started");
//AfxGetMainWnd函數獲取MFC程序中的主框架類指針是一個常用作法
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
Gsz_CriticalSection.Unlock();
return 0;
}
UINT MessageThread2(LPVOID pParam)
{
Gsz_CriticalSection.Lock();
LPTSTR pMessage = _T("Thread2 is started");
//AfxGetMainWnd函數獲取MFC程序中的主框架類指針是一個常用作法
CWnd *pMainWnd = AfxGetMainWnd();
::MessageBox(pMainWnd->m_hWnd, pMessage, _T("Thread message"), MB_OK);
Gsz_CriticalSection.Unlock();
return 0;
}
第四步:給視圖類的添加 鼠標左鍵消息響應函數 函數編寫如下:
注意這個需要點擊如下所示,找個 左鍵響應函數。


void CTestGszView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
AfxBeginThread(MessageThread1, _T("Thread is started")); //啟動線程1
AfxBeginThread(MessageThread2, _T("Thread is started")); //啟動線程2
CView::OnLButtonDown(nFlags, point);
}
第五步:運行測試。
點擊視圖區域
出現下面的東東


