UpdateData(FALSE); 在正常情况下你的编辑框中很显然会显示出"Hello"来。 但是,不怕一万,就怕万一,偏偏在你m_strText="Hello"这个代码执行之后,你的线程切换了,可是在你的工作线程里,你却将m_strText设置成了"Sorry",结果当线程切换回来后,UpdateData(FALSE)后,编辑框上就变成"Sorry"而不是"Hello"了。 所以...
于是在MFC中,首先开了一个线程,用的是boost的timer,每隔1秒读取共享内存中的值,另外一个线程通过调用UpdateData(FALSE)将值显示在界面上。但是在我调试的时候发现,UpdateData一直报错。 最后查了下,还是线程的问题,在线程中,不能直接用UpdateData来更新数值。解决的办法,应该自己定义一个消息,将UpdateData(FALSE)替换为...
UpdateData函数的参数错误:UpdateData函数有一个布尔类型的参数,用于指定是从对话框更新数据到成员变量,还是从成员变量更新数据到对话框。通常情况下,我们使用UpdateData(TRUE)将数据从对话框更新到成员变量,使用UpdateData(FALSE)将数据从成员变量更新到对话框。 如果以上步骤都正确无误,但仍然出现错误,可以检查错误提示的具...
的CString类型的变量,这一步将string转化成CString infile>>temp_str; //接着读 m_address=temp_str.c_str();//m_address是与Edit2绑定的CString类型的变量,这一步将string转化成CString infile>>m_people; //m_people是与Edit3绑定的int类型,可以直接读 infile>>m_room; UpdateData(FALSE); //更新Edit...
m_pLabel=MILabelTTF::create(ServerInfo::s_pNotification->getCString(),UIConst::FONT_SIZE_NORMAL,CCRectMake(x,y,scrollWidth,0),m_pScrollView->getZOrder(),m_pScrollView,false,kCCTextAlignmentLeft);m_pLabel->setColor(ccc3(65,20,20));m_pScrollView->setContainer(m_pLabel); ...
在“UpdateData(FALSE);”处设置断点,按“F11”调试时进入此函数,您会发现“CWnd :: Update”的定义包括以下行。 代码片段 //阻止在UpdateData期间调度控制通知 _AFX_THREAD_STATE * pThreadState = AfxGetThreadState(); HWND hWndOldLockout = pThreadState-> m_hLockoutNotifyWindow; ASSERT(hWndOldLockout!= ...
在使用UpdataData(false)来实现时,总是报错,在网上搜了一下,才知道在工作线程中不能使用UpdateData来更新主线程中的数据。界面的东西,最好就是用主线程(界面线程)去执行相应的操作。要想在子线程(工作线程)里执行界面线程的操作,最好是向主线程发送消息。因为MFC的CWnd用到了TLS,所以不是线程安全的。
在使用UpdataData(false)来实现时,总是报错,在网上搜了一下,才知道在工作线程中不能使用UpdateData来更新主线程中的数据。界面的东西,最好就是用主线程(界面线程)去执行相应的操作。要想在子线程(工作线程)里执行界面线程的操作,最好是向主线程发送消息。因为MFC的CWnd用到了TLS,所以不是线程安全的。
在线程中使用UpdateData(FALSE)来更新窗口的内容,结果在Debug版本下面就出现了Assert报错 原因: 简单的说,不能跨线程访问MFC窗口对象。MFC句柄封装类只在创建句柄的线程中有效,在其它线程中访问会出现无法预料的结果。适当的访问方式是直接访问句柄。你需要另外想办法,例如在线程类中声明一个指针,AfxBeginThread的时候以...