多用几个变量在ondraw中作为流程的控制不可以吗?
解决方案 »
- WIN7下如何实现后台找色?就是窗口被挡住情况下。
- 38节发帖散分
- readfds怎么才能判断连接断开了?
- mmsystem为什么做声音录入时,出现的声音总是断断续续不连续?
- wangk(倒之)兄等高手请进, 同一问题第二贴,关于输入法的智能学习功能问题
- 怎样在程序中播放声音?
- TeeChart 绘图错误 Access violation at address 07198177 in module 'TeeCahrt8.ocx'.
- 资源文件编译出错,error no:rc2121,仔细检查后没有发现错在哪??
- 什么是CGI啊?
- 请问操作EXCEL到底有些什么方法?
- 显示一个选择"拨号连接"的对话框
- tooltip使用?
激活的,不被阻塞,可以随时终止采集过程。
计算量若不大,可以放在主线程中,如下面
代码,若计算量大,也可以采用计算线程,
可以用类似下面的方法保持同步。线程之间可以用最简单的全局变量来共享数据。
// 公共变量
HANDLE gEvent[2];
// gEvent[0] 开始采集数据
// gEvent[1] 终止采集线程
DWORD WINAPI GetDataThread(LPVOID pParam)
{
HWND hWnd = (HWND) pParam;
....... BOOL bContinue = TRUE;
DWORD dwEvent;
while(bContinue)
{
dwEvent = WaitForMultiObjects(2,gEvent,FALSE,INFINITE);
switch(dwEvent)
{
case WWAIT_OBJECT_0 :
// 接收数据
...... // 接收完成
ResetEvent(gEvent[0]);
::SendMessage(hWnd,DATA_READY,...,...);
break;
case WAIT_OBJECT_0 +1:
ResetEvent(gEvent[1]);
bContinue = FALSE;
break;
} // SWITCH
} // WHILE LOOP END return 1;
}void CXXXView::OnStart()
{
gEvent[0] = CreateEvent(NULL, FALSE, FALSE, NULL);
gEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL);
if (gEvent[0] == NULL and and gEvent[1] == NULL )
{
AfxMessageBox("CreateEvent Fail!");
return;
} DWORD dwThreadId;
HANDLE hThread; hThread = CreateThread(NULL,0,GetDataThread,(LPVOID)GetSafeHwnd(),0,&dwThreadId);
if( hThread == NULL)
{
AfxMessageBox("Create GetData Thread Error!");
return ;
}
CloseHandle(hThread); // 以上为启动采集线程的部分,可以在其他地方完成 // 采集数据只需: SetEvent(gEvent[0]);
// 结束采集线程只需: SetEvent(gEvent[1]);
}
void CXXXView::OnDataReady() // 自定义消息
{
// 开始计算
..... // 计算完成,画图
Invalidate(); // 调用OnDraw()或者直接在此写画图代码 // 重新采集数据
SetEvent(gEvent[0]); ......
}