0

Win32 api でスレッドを操作するのは比較的初めてで、解決できない問題に遭遇しました。

ここに私の問題があります。オペレーターが 4 つの端末をテストできるようにする 4 つのスレッド (意図したとおりに動作します) があります。各スレッドで、成功または失敗のいずれかでメイン ウィンドウ フォームにメッセージを送信しようとしています。これはリスト ボックス内に配置されます。以下はスレッドの 1 つです。残りはまったく同じです。

void Thread1(PVOID pvoid)
{
for(int i=0;i<numberOfTests1;i++) {         
    int ret;
    double TimeOut = 60.0;
    int Lng = 1;
    test1[i].testNumber = getTestNumber(test1[i].testName);
    unsigned char Param[255] = {0};
    unsigned char Port1 = port1;

    ret = PSB30_Open(Port1, 16);
    ret = PSB30_SendOrder (Port1, test1[i].testNumber, &Param[0], &Lng, &TimeOut); 
    ret = PSB30_Close (Port1);

    if(*Param == 1) SendDlgItemMessage(hWnd,IDT_RESULTLIST1,LB_ADDSTRING,i,(LPARAM)"PASS");
    else SendDlgItemMessage(hWnd,IDT_RESULTLIST1,LB_ADDSTRING,i,(LPARAM)"FAIL");
}
_endthread();
}

私はコードをデバッグしましたが、リストボックスにデータを入力する以外はすべて実行します。同じコードがスレッドで機能するため、スレッドが何か不足していると思います。メッセージをメイン ウィンドウに送信している間、スレッドをスリープ状態にする必要がありますか?

どんな助けでも大歓迎です。

乾杯

4

1 に答える 1

1

セカンダリ スレッドが UI 要素 ( など) を直接操作しようとするのは望ましくありませんSendDlgItemMessage。代わりに、通常は aWM_COMMANDWM_USER+N などをメイン ウィンドウに投稿し、それに応じて UI 要素を操作します。

于 2013-05-28T21:16:13.770 に答える