多开 MFC线程
序言:我才编程几年啊!就要处理多线程。对于只写函数的我,这难度简直了!不过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线程的更多相关文章
- MFC 线程
//新开一个线程去处理新的工作,可以传一个参数 class MyClass//自定义一个类 { void fun(){} ... } MyClass* myObject=new MyClass;Afx ...
- 主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException
1.必须要开子线程来操作耗时操作,android.os.NetworkOnMainThreadException new Thread(new Runnable() { @Override publi ...
- MFC 线程创建方式
MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC ...
- 开子线程下载图片,回到主线程刷新UI步骤
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [NSThread detachN ...
- MFC 线程中CWnd对象
尽量不要在MFC线程中将CWnd作为参数传递,会引起crash 正确的做法: 1. 将CWnd对应的handle传进来,通过CWnd::FromHandle()函数转换: 2. 在线程中用SendMe ...
- BeginInvoke 方法真的是新开一个线程进行异步调用吗?
转自原文BeginInvoke 方法真的是新开一个线程进行异步调用吗? BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void tre ...
- java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?
首先,服务器的实现不止有这两种方式. 先谈谈题主说的这两种服务器模型: 1.收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞 这个是单线程模型,无法并发,一个请求没处理完服务器就会阻塞,不会 ...
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...
- 安全终止MFC线程
终止线程 有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它.我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了.如果用户中止了打印,那后台打印线程也要 ...
随机推荐
- java中的redis工具类
1.redis基础类 package com.qlchat.component.redis.template; import javax.annotation.PostConstruct; impor ...
- Spark源码值提交任务
/** * Return the number of elements in the RDD. */ def count(): Long = sc.runJob(this, Utils.getIt ...
- Element 'dependencies' cannot have character[children],because the type's content type is elemen
问题描述: Element 'xxxxxxx' cannot have character [children],because the type's content type is element- ...
- 这书真的不错--Spring MVC Beginner's Guide
五百多页,我干到三百多页了. 每个知识点都有说明,操作,解释. 学SPRING MVC,有它就够了. 遗憾的是,这个PDF的文档格式太稀松啦,且,无中文版~~~ 我都想作汉化翻译工作了...算了,忍住 ...
- 洛谷 P1120 小木棍 [数据加强版]
P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它 ...
- Spring MVC中<mvc:annotation-driven />和<context:annotation-config />的区别分析
个人最简单的使用理解: <mvc:annotation-driven />是管理静态资源的,比如静态页面,返回JSON这些. <context:annotation-config / ...
- HIHO 16 C
树分治.对于一棵子树的根节点,至少有一条边与儿子相连的属于重边.对于一条轻边,它的贡献值是两端子树大小的乘积,所以,重边应该是贡献值最大的一边. 至于要求所有的点,进行深度优先搜索,因为移动一个点只会 ...
- HDU 4363
这题是记忆化搜索很容易想到,但状态却不好设 dp[i][j][u][d][l][r][k].对于矩形为i*j,它的四周的颜色分别为u,d,l,r,横竖切的状态为k的种数. 其中要注意一个问题是,停止不 ...
- 改动虚拟机镜像的rootpassword
有时从网上下载的虚拟机镜像.没有rootpassword,必须通过秘钥登录.然后秘钥又须要麻烦的注入到里面去.想用,却无法登录.非常头痛.本文提供一种通过改动虚拟机镜像里面的/etc/shadow文件 ...
- AOP代理分析
一:代理 代理类和目标类实现了同样的接口.同样的方法. 假设採用工厂模式和配置文件的方式进行管理,则不须要改动client程序.在配置文件里配置使用目标类还是代理类,这样以后就非常easy切换.(比如 ...