0

ダイアログが 1 つある MFC ダイアログ ベースのアプリがあります。ボタンをクリックすると、別の作業スレッドが開始されます。残念ながら、作業スレッドの機能が実行されている間、ダイアログのコントロールにアクセスできません。

void CrMainDlg::OnBnClickedButton1()
{
   //...
   CWinThread* fonThread = AfxBeginThread(WorkerThreadProc, iP, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
   //...
 } 

UINT CrMainDlg::WorkerThreadProc(LPVOID Param)
{
//...
       while(/*some bool*/)
       {
           //makesomething
           Sleep(1000);
       }
       //...
}

Sleep(1000) と書いた場合にのみ、メイン ダイアログの ScrollBar や別のボタンなどにアクセスできます。そうしないと、whileが終了した後にのみコントロールにアクセスできます...

私は何を間違っていますか?

4

1 に答える 1

0

(1) ワーカー スレッド関数は静的でなければなりません。static として宣言されていない場合、投稿したコードはコンパイルされません。(2) ワーカー スレッドはコントロールにアクセスせず、データのみにアクセスする必要があります。

于 2013-08-22T14:06:26.397 に答える