そのため、私はWindows APIのスレッドについて学び、いくつかのテストコードを作成しましたが、いくつかの問題があります。まず、2つの機能があります。
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
int i = (int)lpParam;
cout << i << ".) I work! " << endl;
return 0;
}
と
// MyThreadFunction2 - loops continuously forever, outputing "working..." every 1ms
DWORD WINAPI MyThreadFunction2( LPVOID lpParam )
{
int i = (int)lpParam;
while(1) {
cout << i << ".) Working... " << endl;
Sleep(1);
}
return 0;
}
そして、私はCreateThreadを使用してスレッドを作成していますが、後でそれを_beginThreadに変更します。これは、別の関連する投稿で人々が私に行うように指示したものです。だからこれは私がスレッドを作成している方法です:
threads.push_back(CreateThread(
NULL, // default security attributes
0, // use default stack size
lpStartAddress, // thread function name
lpParameter, // arugument to thread function
0, // use default creation flag
NULL)); // ignore thread identifier.
作成したスレッドハンドルをベクトルに入れていますが、それは関係ありません。基本的に私は上記のコードを動作させており、スレッドを正常に作成します。私が抱えている問題は、スレッドがMyThreadFunction2を使用して作成されたときに、TerminateThread(HANDLE、0)を呼び出すことです。この場合、スレッドは永久にループします。TerminateThreadを呼び出すと、プログラムがフリーズしてそこに留まります。「Working...」メッセージが表示されないため、スレッドが停止したようですが、他のコードは続行されません。ただし、MyThreadFunctionを使用しているときにこれと同じ関数を呼び出すと、正常に機能します。
これが私が何が起こっているのかを説明する方法を非常に混乱させているかどうかはわかりませんが、そうではないことを願っています。これは「コードをダンプして、人々に修正してもらう」場所ではないことを私は知っています-私は他の誰かの投稿でそれを読みましたが、あなたが私が上に書いたことを理解しなかった場合、またはそれが役立つ場合に備えて、ここにあります私のコード:
ThreadManager.cpp
ThreadManager.h
申し訳ありませんが、コードの記述が不十分で、いくつかのことが完了していません。私はまだC++の再学習と、WindowsAPIの使用方法の学習に取り組んでいます。しかし、誰かが私が間違っている可能性があることについて何か考えを持っていますか?