对于我的任务,我需要编写一个多线程程序,在一个单独的线程中输出所有小于或等于用户输入的数字的素数。
我是线程新手,并不完全了解如何正确实现它们。但是我创建了一个布尔函数来确定一个整数是否是素数,我将它命名为 bool isPrime。但是,布尔 isPrime 给了我以下错误“声明与“LPVOID isPrime”不兼容。我不知道如何修复它,我还注意到我的编译器(visual c++)为“cout”和“cin”但是如果我声明使用命名空间std,编译器会在“std”下划线并给出这个错误“name must be a namespace name”,我不知道它应该是什么意思。我该如何解决这两个问题?
#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);
}
}