序言:我才编程几年啊!就要处理多线程。对于只写函数的我,这难度简直了!不过MFC的多线程,貌似比较简单,还能处理的了。

(1).开MFC多个线程

在视频采集的过程中,如果不使用媒体计数器,会造成主线程只用于处理采集处理,主界面失去响应;

多开几个线程达到此效果.

一: 头文件:AviTestDlg.h

    //建立参数结构体
typedef struct //传入线程参数结构体wishchin
{
IplImage* TheImage; //与CAviTestDlg 同参数? wishchin
CAviTestDlg* dlg; //与主对话框成为友元 wishchin
}lparameter,lparameter2 , *lpParam; //生成参数结构体 //类内设置友元,声明全局线程为友元
class CAviTestDlg : public CDialog
{
public:
friend UINT CPicThreadInfo(lpParam lp);//线程设置为友元,为使线程访问主对话框函数及变量
friend UINT CPicThreadInfo2(lpParam lpFuc);
}

二:源码文件 AviTestDlg.cpp

  //添加全局线程

  UINT CPicThreadInfo(lpParam lp);

 //在按下控件后,创建线程
void CAviTestDlg::OnBnClickedTraceStart()
{
//测试代码,按下开始追踪,创建新线程 wishchin
UpdateData(TRUE);
///////////////////////////////////////////
//初始化参数。。。
lpParam lp = new lparameter;
lp->TheImage =TheImage;
lp->dlg =this;
StartCapture(lp);//调用开始捕捉函数
} //开始捕捉函数
void CAviTestDlg::StartCapture(lpParam lp)
{
vector<CWinThread*> handle;
//////////////////////////
lpParam parameter= new lparameter; ///////////////////////// 初始化参数列表 在线程函数内部初始化 可以?wishchin
parameter->TheImage = lp->TheImage ;
parameter->dlg = lp->dlg;
///////////////////////////////////////////////////////////////////
CWinThread *pMyThread = AfxBeginThread(AFX_THREADPROC(CPicThreadInfo),parameter); ////创建线程函数CPicThreadInfo wishchin
pMyThread->m_bAutoDelete = FALSE;
pMyThread->ResumeThread();
handle.push_back(pMyThread); //用向量来容纳线程, 真正地开始创建线程 } //线程函数
UINT CPicThreadInfo(lpParam lp)
{ IplImage* TheImage = lp->TheImage ;
CAviTestDlg* dlg = lp->dlg;
/////////////////////////////////////////////////////////////////
//打开视频文件
CvCapture* pCapture = cvCaptureFromFile("C:\\test.avi"); //****测试代码,为少点击一个按钮。。wishchin
if( !(pCapture = cvCaptureFromFile(FilePath))) //argv[1] filename
{
fprintf(stderr, "Can not open video file %s\n", "E:\\test.avi");
return -2;
}
}

过程是这样的:

初始化参数——>初始化线程——>线程函数.

后记:使用AFX函数还是不太好的,涉及到内存问题;最后改用了BOOST函数对象,利用boost线程来实现多线程........

多开 MFC线程的更多相关文章

  1. MFC 线程

    //新开一个线程去处理新的工作,可以传一个参数 class MyClass//自定义一个类 { void fun(){} ... } MyClass* myObject=new MyClass;Afx ...

  2. 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException

    1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override publi ...

  3. MFC 线程创建方式

    MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC ...

  4. 开子线程下载图片,回到主线程刷新UI步骤

    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [NSThread detachN ...

  5. MFC 线程中CWnd对象

    尽量不要在MFC线程中将CWnd作为参数传递,会引起crash 正确的做法: 1. 将CWnd对应的handle传进来,通过CWnd::FromHandle()函数转换: 2. 在线程中用SendMe ...

  6. BeginInvoke 方法真的是新开一个线程进行异步调用吗?

    转自原文BeginInvoke 方法真的是新开一个线程进行异步调用吗? BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void tre ...

  7. java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?

    首先,服务器的实现不止有这两种方式. 先谈谈题主说的这两种服务器模型: 1.收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞 这个是单线程模型,无法并发,一个请求没处理完服务器就会阻塞,不会 ...

  8. WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)

    最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...

  9. 安全终止MFC线程

    终止线程 有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它.我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了.如果用户中止了打印,那后台打印线程也要 ...

随机推荐

  1. 【[Offer收割]编程练习赛14 D】剑刃风暴(半径为R的圆能够覆盖的平面上最多点数目模板)

    [题目链接]:http://hihocoder.com/problemset/problem/1508 [题意] [题解] 求一个半径为R的圆能够覆盖的平面上的n个点中最多的点数; O(N2log2N ...

  2. 【[Offer收割]编程练习赛12 B】一面砖墙

    [题目链接]:http://hihocoder.com/problemset/problem/1494 [题意] [题解] 显然只要记住每一行的各个砖头的间隔处的坐标有多少个就好了: ->也就对 ...

  3. socket状态

    SYN_SEND Indicates active open. SYN_RECEIVED Server just received SYN from the client. ESTABLISHED C ...

  4. 洛谷 P4198 BZOJ 2957 楼房重建

    题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ...

  5. 【ACM】hdu_zs3_1006_AB_201308101123

    A/B Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission ...

  6. Adobe photoshop CC 2018安装激活教程

    2017年10月,Adobe公司发布最新版Adobe CC 2018系列软件,photoshop cc 2018更是迎来惊艳的新功能.下面来分享安装和激活教程. 不会安装请加QQ:1833920353 ...

  7. leetcode中,代码怎样调试,创造本地执行环境

    初次接触leetcode,是我在一个招聘站点上看的,这个OJ真有那么厉害吗? 这几天在这个OJ上做了几道题,发现他的几个特点,1.题目不难(相对于ACM来说,我被ACM虐到至今无力),评判没那么苛刻, ...

  8. ASP.NET MVC脚本及样式压缩

    现在我用ASP.NET MVC4.0,发现它自带有脚本和样式压缩功能.不知道以前的版本有木有,没有深究.太棒了!以前我们还辛辛苦苦自己搞了一个压缩的东西.这再次说明,平庸程序员如我辈,应该把时间和精力 ...

  9. jQuery - 制作点击显示二级菜单效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. 使用printf函数实现串口信息打印——设置IAR和Keil的Options

    在Keil和IAR中都可以使用printf函数,但两者设置的方法不一样.以下分别是IAR和Keil的设置. 下面是Keil的设置. 选中Options--->Target--->Code ...