CreateThread创建的线程中SendMessage给窗体控件

今天调试一个网络发送TS流的程序时碰到的问题,可能比较初级,呵呵~

 

主线程Dialog中开了两个工作线程A和B,A负责实际的网络流发送,B负责时刻计算发送速度和进度,然后显示在主线程的相应文本框IDC_EDIT1中。

 

以下代码即为B线程和主线程同步的解决方案。我用VS2005~

 

其中TotalData 为全局变量,表示当前已发送的数据量,在线程A中同步更新

 

void ShowText_Thread(LPVOID pParam)
{

     CString ShowMes;
     unsigned long time1,time2;
    double data1,data2,rate;
    while(TRUE)
   {
     time1 =GetTickCount();
     data1 = TotalData;
     Sleep(500);
     time2 = GetTickCount();
     data2 = TotalData;
     rate = 8*(data2-data1)/(time2-time1);
     ShowMes.Format(_T("码率:%.2fKb/s流量统计: %.3fMB"), rate,TotalData/1024/1024);


     ::SendMessage((HWND)pParam,WM_SETTEXT,0,*(LPARAM*)&ShowMes);

   }   
}


void CTestDlg::OnButton_BeginThread()

    DWORD dwThreadID = 0;


    ::CreateThread(0,0,(LPTHREAD_START_ROUTINE)ShowText_Thread,GetDlgItem(IDC_EDIT1)->GetSafeHwnd(),0,&dwThreadID);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值