グローバルに2つのスレッドが同時に実行されるようにしようとしています。 コンパイラは、コンパイルの前に行を削除し、そのようwhile
ループでIf-elseステートメントが機能しません
char dir='w'; //global var
UINT EditDir (LPVOID pParam);//accepts dir from user in a loop
UINT Move (LPVOID pParam); //processes dir (its incomplete)
int main()
{
........
........
CWinThread* pThread1 = AfxBeginThread(EditDir,(LPVOID)NULL);
CWinThread* pThread2 = AfxBeginThread(Move,(LPVOID)NULL);
WaitForSingleObject(pThread1, INFINITE);
........
........
}
UINT EditDir(LPVOID pParam)
{
bool end=false;
while (!end)
{
::dir = getchar();
Sleep(10);
if (::dir=='q')end=true;//***************************************
}
return 0;
}
UINT Move (LPVOID pParam)
{
//process dir in a loop
return 0;
}
if
文は動作しません。
私がq
を押した後、ループは終了するはずですが、それは継続します。
どこが間違っていますか?
@EdHeal理由と理由を説明してください... –
コンパイラの最適化が実際に理由であるかどうかを確認するために "-O0"フラグを付けてコンパイルしてみてください –
スレッド間で通信がどのように行われているか、 。 –