class CShiyanDlg;
struct socketRun_struct
{
// char    OrderRegChoosed;//
short    OrderReg;//读/传标志 0x01DSP;0x02CPLD;0x04仪器自检;0x08上传数据;0x10装置自检;0x0303 发送参数;0x0315 接受数据
short     DataLength;//总字节数 32位
CString filenameD;//下载 路径名
CString filenameU;//存   路径名
CShiyanDlg *dlg;//指向当前操作的主窗口
};//定义了一个结构体
struct socketRun_struct *psocket_struct = new struct socketRun_struct;
HANDLE hMutex;
void CShiyanDlg::OnShowTransrate() 
{
// TODO: Add your control notification handler code here
HANDLE hThread_SocketRun;
hThread_SocketRun = CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)SocketRun,
psocket_struct,
CREATE_SUSPENDED,//先挂起!
NULL);
hMutex=CreateMutex(NULL,FALSE,NULL);
Sleep(1000);

}
  
BOOL SocketRun(socketRun_struct *pSocketRun_struct)
{
WaitForSingleObject(hMutex,INFINITE);
long realRecvBytes;
CShiyanDlg *dlg1 = (CShiyanDlg *)pSocketRun_struct->dlg;
long start, end;
long duration,TransRate;
char ch[100];
start = clock();
realRecvBytes =1000;
end = clock();
duration = (end-start)/CLOCKS_PER_SEC;  
TransRate=realRecvBytes/duration;
itoa(TransRate,ch,10);
PostMessage(dlg1->m_hWnd,WM_SECOND_MESSAGE,WPARAM(&ch),NULL);
ReleaseMutex(hMutex);
return 1;
}
LRESULT CShiyanDlg::OnSecondMsg(WPARAM wParam,LPARAM lParam)
{
char *ch1=(char*) wParam;
SetDlgItemText(IDC_ShowTransRate,ch1);
return 0;
}

解决方案 »

  1.   

    CREATE_SUSPENDED,//先挂起!
    ===========
    你挂起了,你后面调用了ResumeThread了吗?
      

  2.   

    谢谢,确实是线程挂起的原因,因为是初学 没照顾到,顺便问问怎么在线程里边去操作窗口的控件,我上边的postmessage函数里边的Dlg1->h_wnd 是有问题的 我的Dlg1是通过一个结构体传来的 但因为线程必须用到结构 所以就在结构体加了一个指向对话框的指针(估计是问题所在,不知怎么解决) 程序就出问题了.