序言:我才编程几年啊!就要处理多线程。对于只写函数的我,这难度简直了!不过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. Codeforces 919C - Seat Arrangements

    传送门:http://codeforces.com/contest/919/problem/C 给出一张n×m的座位表(有已占座位和空座位),请选择同一行(或列)内连续的k个座位.求选择的方法数. H ...

  2. 《hello-world》第八次团队作业:Alpha冲刺-Scrum Meeting 3

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 <hello--worl ...

  3. 【codeforces 515A】Drazil and Date

    [题目链接]:http://codeforces.com/contest/515/problem/A [题意] 每次只能走到相邻的四个格子中的一个; 告诉你最后走到了(a,b)走了多少步->s ...

  4. 详解Cookie、LocalStorage、SessionStorage

    不管是笔试还是面试相信大家都会经常遇到问Cookie.LocalStorage.SessionStorage 这三个不同的,什么不说先上一波图先: 针对他们大小之分应用场景也有不同: 因为考虑到每个 ...

  5. libcloud代码研究(三)——bugs

    Bug 1:对不可迭代类进行迭代(libcloud.storage.driver.cloudfile line. 141-142)      使用libcloud连接自搭建swift服务,自己在服务器 ...

  6. Spring Boot静态资源处理

    Spring Boot静态资源处理 8.8 Spring Boot静态资源处理 当使用Spring Boot来开发一个完整的系统时,我们往往需要用到前端页面,这就不可或缺地需要访问到静态资源,比如图片 ...

  7. Spring Boot开发HTTPS协议的REST接口

    Spring Boot开发HTTP的REST接口流程在前文中已经描述过,见<SpringBoot开发REST接口>. 如需要支持HTTPS,只需要在如上基础上进行设置.修改/resourc ...

  8. What you can talk

    data buffer who locked the account hash join cost memory and nested loop do not. How to make it hash ...

  9. centos7 安装vsftpd的步骤

    感觉非常坑,依照网上说的没一个都測试了,可一直都报错. 不断的又一次安装不下10次,最后一次最终測试出了正确的方法. #官网配置说明## https://security.appspot.com/vs ...

  10. Android Fragment实现button间的切换

    原文地址:http://blog.csdn.net/a123demi/article/details/32693037 Fragment要点 Fragment是activity的界面中的一部分或一种行 ...