本人小菜鸟级别,做了个mfc的测试软件
将每台设备的信息、测试操作等封装到一个类里,然后将创建的设备对象插入到一个list容器里,界面点按钮就会访问容器,然后依次去调用对象里的测试函数。测试函数里是起了一个线程。请问,怎样将测试结果反馈到界面上~拜托各位了~~~
email:[email protected]
mfc多线程数据显示
将每台设备的信息、测试操作等封装到一个类里,然后将创建的设备对象插入到一个list容器里,界面点按钮就会访问容器,然后依次去调用对象里的测试函数。测试函数里是起了一个线程。请问,怎样将测试结果反馈到界面上~拜托各位了~~~
email:[email protected]
mfc多线程数据显示
用updatedata(true);
更新
CTestDialog *dlg = .....;
DWORD dwThreadID = 0;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadTest,dlg ,0,&dwThreadID);DWORD ThreadTest(LPVOID wParam)
{
CTestDialog *pDlg = (CTestDialog *)wParam;
if(pDlg != NULL)
{
while(...)
{
.....
}
pDlg->PostMessage(.....);线程中通过发送消息给界面进行更新,不要直接更新界面, 否则是不安全调用.
}
return 0;
}
http://blog.csdn.net/hjx_1000/article/details/8476092
直接用就行了,它是窗口类自带的成员变量
PostMessage这个里面的参数,好像没有能直接放字符串的。
sprintf(pBuf,"%s","hello world");
::PostMessage(pData->m_hDebugerWnd,MSG_RES_DEBUG_THREAD,(WPARAM)0,(LPARAM)pBuf);
//发送消息代码。这里还没进到线程里,先在起线程的上一级,测试了下。
VOID CDevOper::Get(HWND m_hMainWnd,int flag){
char* pBuf = new char(256);
sprintf(pBuf,"%s","hello world");
PostMessageA( m_hMainWnd,ID_MSG_STATE,0,(LPARAM)pBuf);
return;
}
//接收代码
LRESULT CMibWalkDlg::onState( WPARAM w, LPARAM a)
{
m_mStaticState.SetWindowTextA((LPCTSTR)a );
UpdateData( FALSE );
return 0;
}
//与函数绑定部分的代码。
ON_MESSAGE( ID_MSG_STATE, onState )这样是不是哪又错了,还是得不到结果。
VOID CDevOper::Get(HWND m_hMainWnd,int flag){
char szBuf[64]={0};
sprintf(szBuf,"%s","hello world");
SendMessageA( m_hMainWnd,ID_MSG_STATE,0,(LPARAM)szBuf);
return;
}
//接收代码
LRESULT CMibWalkDlg::onState( WPARAM w, LPARAM a)
{
m_mStaticState.SetWindowTextA((LPCTSTR)a );
return 0;
}
2、你的工程是使用的多字节的,而pbuf是char类型的指针,你将char* 修改为WCHAR*
不过还有个问题哈。
需要发的消息都是 CString 类型的。请问怎么在 PostMessageA 这里使用啊。
例如:char* filename = csFileName.GetBuffer();