VS线程学习笔记(C++)

1.程序、进程、线程、多线程概念

程序:计算机指令的集合,以文件的形式存储在磁盘上。不占用运行资源。

进程:程序的运行实例,程序在其自身的地址空间中的一次执行活动。可进行资源申请、调度和独立运行。线程的执行环境。

线程:进程内的一个执行路径,负责执行包含在线程地址空间中的代码。

多线程程序:进程地址空间中有多个线程,其中一个为主线程。所有进程共享进程的地址空间、全局对象等资源。线程之间的切换依靠执行环境的改变。


2.线程的创建(参考《VisualC++2010 开发权威指南》第14章)

//声明控制函数(全局的,不放在类中)
UINT ThreadFunc(LPVOID pPARAM);
//定义控制函数,一般线程函数中只有三句话
UINT ThreadFunc(LPVOID pPARAM)
{
	CVideoProcessDlg *ptp = (CVideoProcessDlg*)pPARAM;	//指针强制转换;
		ptp->ImageProcess();				//调用某个对象中的方法(该方法一般不需要输入参数);
	return 0;						//return 
}


CWinThread* pThread;					//在类中声明,可以用于线程的控制,如暂停和唤醒
//创建工作者线程,可以在初始化中创建
pThread = AfxBeginThread(ThreadFunc,			//线程函数名
			 this,//此对象指针
			 THREAD_PRIORITY_NORMAL,//优先权,一般使用默认模式
			 0,
			 CREATE_SUSPENDED,		//线程初始状态为暂停
			 NULL);


pThread->ResumeThread();	//启动线程
pThread->SuspendThread();	//暂停线程


3.线程之间的同步(参考《VC++深入详解》第16章)
HANDLE g_hEvent //在类中声明

g_hEvent = CreateEvent(NULL,//进程默认安全性
			TRUE,//人工重置的事件对象
			FALSE,//初始处于无信号状态
			NULL);//匿名的事件对象

SetEvent(g_hEvent); //设置事件对象为有信号状态
ResetEvent(g_hEvent); //设置事件对象为无信号状态
WaitForSingleObject(g_hEvent, INFINITE); //等待有信号状态的事件,放置在ImageProcess()中


4.当一个线程访问资源时候,其他线程不能同时访问该资源。这里可以利用BOOL变量,完成线程的互斥。


5.注意OnClose()中的回收工作,需要释放资源,确保线程的终止等
void CVideoProcessDlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	m_bQuit = TRUE;//主线程结束信号
	SetEvent(m_hEventImageAcquired);//防止线程处于等待状态,让线程能够顺利终止(执行到return)

	Sleep(20); //给线程的终止留出时间
	CDialogEx::OnClose();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值