「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()函数中,可以编写任何你希望执行的代码。

发布了191 篇原创文章 · 获赞 611 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/Robot_Starscream/article/details/100176617
今日推荐