多开 MFC线程
序言:我才編程幾年啊!就要處理多線程。對(duì)于只寫函數(shù)的我,這難度簡(jiǎn)直了!不過MFC的多線程,貌似比較簡(jiǎn)單,還能處理的了。
(1).開MFC多個(gè)線程
????? 在視頻采集的過程中,如果不使用媒體計(jì)數(shù)器,會(huì)造成主線程只用于處理采集處理,主界面失去響應(yīng);
????? 多開幾個(gè)線程達(dá)到此效果.
?一: 頭文件:AviTestDlg.h
//建立參數(shù)結(jié)構(gòu)體 typedef struct //傳入線程參數(shù)結(jié)構(gòu)體wishchin{IplImage* TheImage; //與CAviTestDlg 同參數(shù)? wishchinCAviTestDlg* dlg; //與主對(duì)話框成為友元 wishchin}lparameter,lparameter2 , *lpParam; //生成參數(shù)結(jié)構(gòu)體//類內(nèi)設(shè)置友元,聲明全局線程為友元 class CAviTestDlg : public CDialog{public:friend UINT CPicThreadInfo(lpParam lp);//線程設(shè)置為友元,為使線程訪問主對(duì)話框函數(shù)及變量friend UINT CPicThreadInfo2(lpParam lpFuc);}二:源碼文件 AviTestDlg.cpp
//添加全局線程UINT CPicThreadInfo(lpParam lp);//在按下控件后,創(chuàng)建線程void CAviTestDlg::OnBnClickedTraceStart() {//測(cè)試代碼,按下開始追蹤,創(chuàng)建新線程 wishchinUpdateData(TRUE);/////初始化參數(shù)。。。lpParam lp = new lparameter;lp->TheImage =TheImage;lp->dlg =this;StartCapture(lp);//調(diào)用開始捕捉函數(shù) }//開始捕捉函數(shù) void CAviTestDlg::StartCapture(lpParam lp) {vector<CWinThread*> handle;//lpParam parameter= new lparameter; / 初始化參數(shù)列表 在線程函數(shù)內(nèi)部初始化 可以?wishchin parameter->TheImage = lp->TheImage ;parameter->dlg = lp->dlg;///CWinThread *pMyThread = AfxBeginThread(AFX_THREADPROC(CPicThreadInfo),parameter); 創(chuàng)建線程函數(shù)CPicThreadInfo wishchinpMyThread->m_bAutoDelete = FALSE;pMyThread->ResumeThread();handle.push_back(pMyThread); //用向量來容納線程, 真正地開始創(chuàng)建線程 }//線程函數(shù) UINT CPicThreadInfo(lpParam lp){IplImage* TheImage = lp->TheImage ;CAviTestDlg* dlg = lp->dlg;///打開視頻文件CvCapture* pCapture = cvCaptureFromFile("C:\\test.avi"); //****測(cè)試代碼,為少點(diǎn)擊一個(gè)按鈕。。wishchinif( !(pCapture = cvCaptureFromFile(FilePath))) //argv[1] filename{fprintf(stderr, "Can not open video file %s\n", "E:\\test.avi");return -2;}}過程是這樣的:?????? 初始化參數(shù)——>初始化線程——>線程函數(shù).
后記:使用AFX函數(shù)還是不太好的,涉及到內(nèi)存問題;最后改用了BOOST函數(shù)對(duì)象,利用boost線程來實(shí)現(xiàn)多線程........
總結(jié)
- 上一篇: 宝可梦剑盾单首龙在哪
- 下一篇: 我的起源宝库大门怎么开