私の課題では、ユーザーが入力した数以下のすべての素数を別のスレッドで出力するマルチスレッド プログラムを作成する必要があります。
私はスレッドに不慣れで、それらを正しく実装する方法を完全には理解していません。しかし、整数が素数であるかどうかを判断するブール関数を作成し、bool isPrime と名付けました。ただし、bool isPrime を使用すると、「宣言は "LPVOID isPrime" と互換性がありません」というエラーが表示されます。修正方法がわかりません。また、コンパイラ (Visual C++) が "cout" に赤い下線を付けていることにも気付きました。 「cin」ですが、名前空間 std を使用して宣言すると、コンパイラは「std」に下線を付け、「名前は名前空間名でなければなりません」というエラーを表示しますが、これが何を意味するのかわかりません。 ?
#include <Windows.h>
DWORD Prime;
DWORD WINAPI primeThreadFun(LPVOID isPrime)
{
bool isPrime(int n)
{
float sqrtn = sqrt(n);
if (n < 2) return false;
if (n < 4) return true;
if (n % 2 == 0) return false;
for (int d = 3; d <= sqrtn; d += 2)
if (n % d == 0) return false;
return true;
}
}
int main(int argc, char *argv [])
{
DWORD ThreadId;
HANDLE ThreadHandle;
int n;
cout << "Enter a number: " << endl;
cin >> n;
for (int i = 0; i <= n; i++)
if (isPrime(i)) cout << i << " ";
cout endl;
}
ThreadHandle = CreateThread(NULL, 0, primeThreadFun, (LPVOID) isPrime, NULL, ThreadID []);
if (ThreadHandle != NULL)
{
WaitForSingleObject(ThreadHandle INFINITE);
CloseHandle(ThreadHandle);
}
}