我的线程出什么毛病了???

huhuanaiqing 2004-11-16 09:22:35
我建了一个基于单文档的工程,其视图是基于对话框的。我想用线程动态改界面上的文本框的值!
UINT Thread1(LPVOID param)
{ view->m_Length=80; //CCeshiView *view
view->UpdateData(false);//问题好像出在这
return 0;
}
void CCeshiView::OnStatic1() //静态文本的单击事件
{ AfxBeginThread(Thread1,0);
}
这段程序编译时能通过,但是单击静态文本是就报错!!
好像是说非法访问!!
我只要把view->UpdateData(false);这句注释了就好了!!
求大家帮我看看了!!谢谢了!!
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
savage54321 2004-11-17
  • 打赏
  • 举报
回复
是这样子,你新建一个线程,系统就给你分配出一个新堆,所以在执行线程函数的时候首先就要将传递的参数压栈。你所以你的UpdateData就要窗口的句柄!这样它才知道对那个窗口UpdateData
linxy2002 2004-11-17
  • 打赏
  • 举报
回复
应该是你的视图类用的不对了
BigFanOfCpp 2004-11-17
  • 打赏
  • 举报
回复
自己看看updatedata的定义,就知道了。
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal?

CDataExchange dx(this, bSaveAndValidate);

// prevent control notifications from being dispatched during UpdateData
_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();//这里
HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
ASSERT(hWndOldLockout != m_hWnd); // must not recurse
pThreadState->m_hLockoutNotifyWindow = m_hWnd;

BOOL bOK = FALSE; // assume failure
TRY
{
DoDataExchange(&dx);
bOK = TRUE; // it worked
}
CATCH(CUserException, e)
{
// validation failed - user already alerted, fall through
ASSERT(!bOK);
// Note: DELETE_EXCEPTION_(e) not required
}
AND_CATCH_ALL(e)
{
// validation failed due to OOM or other resource failure
e->ReportError(MB_ICONEXCLAMATION, AFX_IDP_INTERNAL_FAILURE);
ASSERT(!bOK);
DELETE_EXCEPTION(e);
}
END_CATCH_ALL

pThreadState->m_hLockoutNotifyWindow = hWndOldLockout;
return bOK;
}
huhuanaiqing 2004-11-17
  • 打赏
  • 举报
回复
问题解决了!!我用的消息传递!!可是我还想知道上面是什么问题??
huhuanaiqing 2004-11-17
  • 打赏
  • 举报
回复
能说得再明白点吗??谢谢!!
hundlom 2004-11-16
  • 打赏
  • 举报
回复
这个最好是自定义消息,之后在SendMessage();
linxy2002 2004-11-16
  • 打赏
  • 举报
回复
你这个view是怎么得到的?贴出来看看

15,467

社区成员

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

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