我如何在window.h线程中声明一个bool函数?
对于我的任务,我需要编写一个多线程程序,在单独的线程中输出小于或等于用户输入的数字的所有素数。
我是新来的线程,并没有完全理解如何正确地实现它们。 但是我创建了一个布尔函数来确定一个整数是否是一个素数,我将它命名为bool isPrime。 然而,布尔isPrime给我以下错误“声明是不符合”LPVOID isPrime“。我不知道如何解决它,我也注意到,我的编译器(visual c + +)给出了”cout“的红色下划线和“cin”,但如果我声明使用命名空间标准,比编译器强调“标准”,并给出这个错误“名称必须是命名空间名称”,我不知道它应该是什么意思。我该如何解决这两个问题?
#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);
}
}
C / C ++不支持嵌套函数 - isPrime嵌套在primeThreadFun中。 将它移出,并从primeThreadFun中调用它。
另外,你有一个名为“isPrime”的全局变量 - 你不能拥有这个全局函数“isPrime()”
对于你需要包括“iostream”
首先, CreateThread
需要一个特定的签名(引用):
DWORD WINAPI ThreadProc(LPVOID lpParam);
所以你的线程声明将需要相同的签名。
其次,你试图做的不是分离线程的好方法。 把线程想象成一个单独的过程。 它会完成一些任务,然后结束。
你需要做一些类似的事情(注意:下面的内容不会被调试,只能作为一个起点 - 这是故意完成的,因为我不是在这里为你做作业):
struct MyData
{
std::vector<unsigned int> myVec;
unsigned int myCap;
};
DWORD WINAPI MyThreadProc(LPVOID lpParam)
{
MyData* pData = (MyData*)lpParam;
for (int i = 4; i <= myCap; ++i)
{
int root = (int)std::sqrt(i);
bool isPrime = true;
for (int j = 2; j <= root; ++j)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
pData->myVec.push_back(i);
}
}
}
int main()
{
MyData data;
std::cin >> data.myCap;
HANDLE hThread = CreateThread(NULL, 0, MyThreadProc, &data, NULL, NULL);
std:: cout << "Finding Primes" << std::endl;
while (WaitForSingleObject(hThread, 1000) != WAIT_OBJECT_0)
{
std::cout << ".";
}
std::cout << std::endl;
std::copy(data.begin(), data.end(), std::ostream_iterator<unsigned int>(std::cout, " "));
return 0;
}
链接地址: http://www.djcxy.com/p/78929.html