前言:
此历程来自机器人控制工程中的一部分,“开线程调用多媒体定时器”在工程中是很常用的一部分,但对于新手来说却很难理解。下面小白用最简单的方式,清晰的记录下程序顺序运行的每一环节。
主要完成两件事:声明一个线程,声明一个多媒体定时器。我想你也猜到要怎么做了,对,在声明的线程里面声明多媒体定时器,然后执行。道理是不是很简单,理解这句话你就掌握80%了,程序编写更简单。
整个程序程序分成四个部分:
- OnBnClickedRbfcontrol()函数,负责声明一个线程,然后执行声明的RBFThreadproc()函数;
- RBFThreadproc(LPVOID pParam)函数,是开启线程后的执行函数,本例程执行多媒体定时器CreateTimer()函数;
- CreateTimer()函数,用来声明一个多媒体定时器,然后执行循环调用函数TimeProc()函数;
- 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()函数中,可以编写任何你希望执行的代码。