我們知道,線上程中無法使用像updateData(false)這些全域函數,但是我們又想線上程函數中顯示一些改變,那麼我們該如何辦呢?
1、比較好的辦法:
hGpsThread = CreateThread(NULL, NULL, GPSThreadProc, this, NULL, &m_dwThreadID);
傳遞的this指標可以進行強制轉換,
線程函數:
DWORD CGPS_TestDlg::GPSThreadProc(LPVOID pArg)
CGPS_TestDlg *dlg;
dlg = (CGPS_TestDlg*)pArg;
CEdit *pEdit = (CEdit*)dlg->GetDlgItem(IDC_EDIT1);
CEdit *pEdit1 = (CEdit*)dlg->GetDlgItem(IDC_EDIT2);
str.Format(L"%lf", gps_Position.dblLongitude);
pEdit->SetWindowText(str);
注意,上面一行可以換為dlg->SetDlgItemText(IDC_EDIT1, str);
但是絕對不能pEdit->SetDlgItemText(IDC_EDIT1, str);因為pEdit下面沒有子框。而dlg是主框,所以可以調用SetDlgItemText。
2、也可以不傳遞this參數,而是:
CEdit * pEdit;
pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
DWORD m_dwThreadID; //建立線程
hGpsThread = CreateThread(NULL, NULL, GPSThreadProc, pEdit, NULL, &m_dwThreadID);
線程函數
DWORD CGPS_TestDlg::GPSThreadProc(LPVOID pArg)
CEdit *pEdit = NULL;
pEdit = (CEdit * )pArg;
str.Format(L"%lf", gps_Position.dblLongitude);
pEdit->SetWindowText(str);
但是這樣只能對一個控制項操作,無法同時改變多個控制項,還是方法一比較好。
做一下小結,以後就知道該如何做了,其實機制還是不太明白,希望明白的給講講。