「 C++ & MFC 」“设置线程运行多媒体定时器”教程

一、前言

        此历程来自机器人控制工程中的一部分,“开线程调用多媒体定时器”在工程中是很常用的一部分,但对于新手来说却很难理解。下面小白用最简单的方式,清晰的记录下程序顺序运行的每一环节。

        主要完成两件事:声明一个线程,声明一个多媒体定时器。我想你也猜到要怎么做了,对,在声明的线程里面声明多媒体定时器,然后执行。道理是不是很简单,理解这句话你就掌握80%了,程序编写更简单。

二、技术实现

        整个程序程序分成四个部分:

  1. OnBnClickedRbfcontrol()函数,负责声明一个线程,然后执行声明的RBFThreadproc()函数;
  2. RBFThreadproc(LPVOID pParam)函数,是开启线程后的执行函数,本例程执行多媒体定时器CreateTimer()函数;
  3. CreateTimer()函数,用来声明一个多媒体定时器,然后执行循环调用函数TimeProc()函数;
  4. TimeProc()函数,负责循环调用你期望的执行指令。
void CANNControlDlg::OnBnClickedRbfcontrol()
{
	//声明一个线程
	HANDLE hThread;
	UINT uiThreadId = 0;
	hThread = (HANDLE)_beginthreadex(NULL,0,RBFThreadproc,this,CREATE_SUSPENDED,&uiThreadId);
    //判断是否声明成功
	if(NULL != hThread)
	{
		ResumeThread( hThread );
		m_RBFThread = hThread;
	}
}

UINT CANNControlDlg::RBFThreadproc(LPVOID pParam)
{
    //线程执行内容
	CANNControlDlg* pThis = reinterpret_cast<CANNControlDlg*>(pParam);
	_ASSERTE( pThis!= NULL);
	pThis->CreateTimer();
	return 1L;
}

UINT CANNControlDlg::CreateTimer()
{
	//声明一个多媒体定时器
	timeBeginPeriod(1);
	FileTimerID = timeSetEvent(DataPeriod,1,TimeProc,(DWORD)this,TIME_PERIODIC);    
	return FileTimerID;

}

void CALLBACK CANNControlDlg::TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
    //多媒体定时器执行内容
	CANNControlDlg* pdcpackerdlg = (CANNControlDlg*)dwUser;
	pdcpackerdlg->MultiMediaRun();
}

void CANNControlDlg::MultiMediaRun()
{
    //多媒体定时器执行函数
	ReadDataFromTC();
}

        最后,在MultiMediaRun()函数中,编写希望循环执行的代码段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值