MFC 中的多线程(Work线程)(转)

转载 2012年03月29日 14:24:44

作者: yongsheng123 (1 篇文章) 日期: 三月 22, 2012 在 5:28 下午

MFC中的线程分为两种,我用到的是Work线程,主要用于后台计算等等,不用和用户交互。

(1)首先,在需要建立多线程的那个类的实现文件 *.cpp中,定义以下全局变量,

struct threadInfo //一个信息结构体
{
depthDlg* DlgHandle;//对话框的指针,用于传入参数
};

threadInfo Info; //定义一个结构体变量

UINT Thread_Kincet(LPVOID lpParam); //多线程函数

其中,第一个threadInfo 是自己随意定义的一个结构体,就是当多线程函数启动的时候,需要传给一些参数,可以借助这个结构体来传参,注意大小不要超过四个字节。我传的是这个结构体中定义的是这个类的对话框,后来用它来传这个对话框的指针,感觉非常好用。但是后来我发现其实也不是那么得好用,如果你用过,你就懂得。。。于是我在之后就没有使用它,如果你想用就用吧。

(2)然后就在这个类中,定义一个多线程的对象,

protected:
CWinThread* pThread; //一个线程对象

(3)然后就在需要开启多线程的地方,比如按下某个按钮的时候,

Info.DlgHandle = this;//把当前对话框的指针传进线程中,//开始想用这个传参的,后来觉得不好用,就不用它了。

pThread = AfxBeginThread(Thread_Kincet, this);//开启线程

这样这个线程就算是开启了,这里AfxBeginThread函数的第二个参数就是传参用的,我这传递的是这个对话框的指针。

(4)在Thread_Kincet函数中写你需要在这个线程中所需要处理的东西,我在Thread_Kincet函数里写了一个死循环,用来显示摄像头采集到的数据,这里还需要关闭这个摄像头,同时也要关闭线程,因为是Word线程,所以只要Thread_Kincet运行完就算是关闭了。这里采用一个CEvent,参考http://blog.csdn.net/lwbeyond/article/details/5686165中的做法

1)首先,在这个类的cpp文件上方,引入#include

2)在这个文件中定义一个全局变量,

CEvent StopThread; //一个事件,用于发送信息停止线程

因为这个消息要在多个线程中应用,所以要定义为全局变量。

3)在函数Thread_Kincet中的死循环里,写下

if( WAIT_OBJECT_0 == WaitForSingleObject(StopThread, 0)) // 收到激发态的消息时关闭,否则不理
{
StopThread.ResetEvent();//使其再次无效
return 0;//正常退出
}

注意WaitForSingleObject中的第二个参数,应该为0,这样就不会在这里等待了。

4)设置一个关闭摄像头的按钮,用来发出退出的消息,比如设置一个关闭按钮,然后在其按键响应函数中写

StopThread.SetEvent();//激发事件,使得线程退出
StopThread.Unlock();//释放事件

5)另外可以在线程开始之前设置StopThread事件无线,即StopThread.ResetEvent()。默认初始化之后是无效的,保险起见,可以再设置一下。

(5)结束!

 

博客来源:http://software.intel.com/zh-cn/blogs/2012/03/22/mfc-work/

VS2010/MFC入门编程十七(多线程的创建,包括工作线程和用户界面线程)

MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的。每一个应用程序的执行都有一个主线程...
  • yu__jia
  • yu__jia
  • 2014年07月29日 09:01
  • 2955

【C++编程】C++实现多线程编程

在C++的多线程编程实现里有两种方式,一种是Windows头文件里的CreateProcess,另一种是process.h里的_beginthread,我这里用的是后一种,并且对器多线程操作实现里类似...

MFC 中的多线程(Work线程)

MFC中的线程分为两种,我用到的是Work线程,主要用于后台计算等等,不用和用户交互。 (1)首先,在需要建立多线程的那个类的实现文件 *.cpp中,定义以下全局变量, struct thread...
  • kirawoo
  • kirawoo
  • 2012年10月24日 15:15
  • 492

MFC创建多线程(工作者线程)demo

  • 2016年04月06日 09:57
  • 3.71MB
  • 下载

MFC多线程各种线程用法 .(编译器版本WieVC6.0)

一、问题的提出 编写一个耗时的单线程程序:   新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为 ...

Boost多线程-替换MFC线程

Mfc的多线程看起来简单,可以把线程直接压入向量,由系统类似进行调配,其实在内存的处理问题上留下了漏洞。在新线程里面载入大量流,会导致内存泄露。 方便之处:直接使用结构体传入函数参数,供函数使用。...

MFC多线程之工作者线程

1 2
  • wwkaven
  • wwkaven
  • 2014年09月04日 10:21
  • 540
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 中的多线程(Work线程)(转)
举报原因:
原因补充:

(最多只允许输入30个字)