嵌入式線程函數中如何對CEdit控制項操作小結

來源:互聯網
上載者:User

我們知道,線上程中無法使用像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);

但是這樣只能對一個控制項操作,無法同時改變多個控制項,還是方法一比較好。
做一下小結,以後就知道該如何做了,其實機制還是不太明白,希望明白的給講講。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.