数据采集,波形刷新: 小弟第一次采用多线程技术,我将从板卡获取数据作为后台处理线程,命名为EventThread,还创建了一个刷新波形的线程DrawThread,不过使用之后,CPU的占有率不稳定,有时在30%左右,有有时候在10%以下,现贴出代码,请各位看看,问题出在哪里,由于对多线程技术不了解,不足之处请大家指出:
DWORD dwThreadId0=0;
DWORD dwThreadId1 = 1;
hThreadEvent=::CreateThread(NULL,NULL,EventThread,NULL,0,&dwThreadId0);
hThreadDraw=::CreateThread(NULL,NULL,DrawThread,NULL,CREATE_SUSPENDED,&dwThreadId1); //波形刷新的线程暂时挂起
::SetThreadPriority(hThreadEvent,THREAD_PRIORITY_TIME_CRITICAL); //设置线程优先级
::SetThreadPriority(hThreadDraw,THREAD_PRIORITY_TIME_CRITICAL); //设置线程优先级
static DWORD WINAPI EventThread(LPVOID pVoid)//设置事件监视进程
{
while(TRUE)
{
if (WAIT_OBJECT_0 == ::WaitForSingleObject(hEvent0,10))
{
pDlg->GetWave(bufRead);//从板卡获取数据
}
}
}static DWORD WINAPI DrawThread(LPVOID pVoid)
{
while(TRUE)
{
pDlg->DrawWave();
::SuspendThread(hThreadDraw);
::Sleep(10);
}
}void CScopeDlg::GetWave(WORD Buffer[])
{
//处理数据
::ResumeThread(hThreadDraw);//处理数据完毕后唤醒线程
}
DWORD dwThreadId0=0;
DWORD dwThreadId1 = 1;
hThreadEvent=::CreateThread(NULL,NULL,EventThread,NULL,0,&dwThreadId0);
hThreadDraw=::CreateThread(NULL,NULL,DrawThread,NULL,CREATE_SUSPENDED,&dwThreadId1); //波形刷新的线程暂时挂起
::SetThreadPriority(hThreadEvent,THREAD_PRIORITY_TIME_CRITICAL); //设置线程优先级
::SetThreadPriority(hThreadDraw,THREAD_PRIORITY_TIME_CRITICAL); //设置线程优先级
static DWORD WINAPI EventThread(LPVOID pVoid)//设置事件监视进程
{
while(TRUE)
{
if (WAIT_OBJECT_0 == ::WaitForSingleObject(hEvent0,10))
{
pDlg->GetWave(bufRead);//从板卡获取数据
}
}
}static DWORD WINAPI DrawThread(LPVOID pVoid)
{
while(TRUE)
{
pDlg->DrawWave();
::SuspendThread(hThreadDraw);
::Sleep(10);
}
}void CScopeDlg::GetWave(WORD Buffer[])
{
//处理数据
::ResumeThread(hThreadDraw);//处理数据完毕后唤醒线程
}
多线程嘛,有就干活,没有就休息
内存是否泄漏,用工具查比较好