在线程中可以用主线程传过来的图形空间在界面上画图么

Breeze 2005-12-23 10:41:19
我在界面上放了一个图形控件, 然后应设了一个成员变量, 将之作为参数传给work线程,在work线程中计算数据然后用这个图形控件变量在界面上画图,现在一执行程序就是abornamal program terminate, 追踪了一下,发现是在画图的时候出了问题,那位大侠指点一下,谢谢。

void CPlotDataDlg::OnButton1()
{
pThread = AfxBeginThread(PlotData, (LPVOID)&m_NiGraph, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);

pThread->m_bAutoDelete = FALSE;

pThread->ResumeThread();
}

void CPlotDataDlg::OnButton2()
{
SetEvent(gEvent);

delete pThread;
}


UINT PlotData(LPVOID param)
{
int i=0, j=0, k=0;
int datalen = 1001;
CNiReal64Vector vectordata(1001);
DWORD dwRet;

CNiGraph *pGraph = (CNiGraph *)param;

while(TRUE)
{
j=k;

for(i=0; i<datalen; i++)
{
vectordata[i] = sin(double(j));

j++;
}

pGraph->ChartY(vectordata);

dwRet = WaitForSingleObject(gEvent, 1000);

if (dwRet == WAIT_OBJECT_0)
{
break;
}

k++;
}

AfxMessageBox("Thread about to end", MB_OK);

return 0;
}
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Breeze 2005-12-23
  • 打赏
  • 举报
回复
自己顶一下,那位大侠指点一下阿
oyljerry 2005-12-23
  • 打赏
  • 举报
回复
主线程处画,worker thread post message
真糨糊 2005-12-23
  • 打赏
  • 举报
回复
刚才打错了
如果是自己画的话,就必需在界面所在的线程里画
真糨糊 2005-12-23
  • 打赏
  • 举报
回复
如果是自己画的话,就不需在界面所在的线程里画
Breeze 2005-12-23
  • 打赏
  • 举报
回复
找到原因了,对Active x 控件,访问时要先调用 coinitialize ,访问结束要调用couninitialize

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧