今天调试一个网络发送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);
}