MFC子线程调用绘图函数程序会挂
时间:2011-11-28
来源:互联网
高手们好,我在子线程中调用绘图函数,多次重复调用程序就会崩溃,请问是怎么回事?
for循环大概调用实际次就会挂,挂在SelectObject原函数中 ASSERT(m_hDC != NULL);
请问改怎么解决?谢谢了.C++不太熟.
C/C++ code
for循环大概调用实际次就会挂,挂在SelectObject原函数中 ASSERT(m_hDC != NULL);
请问改怎么解决?谢谢了.C++不太熟.
C/C++ code
UINT ThreadExecuteTest(LPVOID lpParam) { ... while(is_loop_run_flag) { pdlg->ClearAntRect(); pdlg->DispAllAnt(); Sleep(100); pdlg->UpdateAntValue(); if(pdlg->IsAllAntGotoEnd()) { pdlg->SetAntInitValue(); pdlg->updatetime(run_time); run_time=0; is_loop_run_flag=false; } run_time++; } ... } void CCreepingGameDlg::ClearAntRect() { int x1,y1,x2,y2; CDC *p1=GetDC(); CPen pen1; CPen *oldPen; y1=TREE_START_Y-20; y2=TREE_START_Y-2; pen1.CreatePen(PS_SOLID,2,RGB(255,255,255)); oldPen = p1->SelectObject(&pen1); x1=TREE_START_X; x2=TREE_END_X+10; p1->MoveTo(x1,y1); p1->Rectangle(x1,y1,x2,y2); p1->SelectObject(oldPen); } void CCreepingGameDlg::DispAnt(int start_x,COLORREF color) { int x1,y1,x2,y2; CDC *p1=GetDC(); CPen pen1; CPen *oldPen; y1=TREE_START_Y-20; y2=TREE_START_Y-2; pen1.CreatePen(PS_SOLID,2,color); oldPen = p1->SelectObject(&pen1); x1=start_x; x2=x1+10; p1->MoveTo(x1,y1); // p1->Rectangle(x1,y1,x2,y2); p1->SelectObject(oldPen); }
作者: muyeyueming 发布时间: 2011-11-28
网上搜索,有人说改用发消息绘图,我试验了下,下面的代码不行,还是现象一样,盼望高手解答!!
C/C++ code
C/C++ code
UINT ThreadExecuteTest(LPVOID lpParam) { ... while(is_loop_run_flag) { ::SendMessage(pdlg->m_hWnd,WM_UPDATE_WIN,0,0); ... } LRESULT CCreepingGameDlg::antarea_redraw(WPARAM w,LPARAM l) { ClearAntRect(); DispAllAnt(); return 0; }
作者: muyeyueming 发布时间: 2011-11-28
CDC *p1=GetDC();
需要ReleaseDC(p1)
需要ReleaseDC(p1)
作者: heksn 发布时间: 2011-11-28
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28