在单独的线程中查找素数
Find prime numbers in a separate thread
下面给了我一个任务。
编写一个输出素数的多线程Java、Pthreads或Win32程序。这程序应按以下方式工作:
- 用户将运行程序,并在命令行上输入一个数字
- 然后,程序将创建一个单独的线程,输出所有素数小于或等于用户输入的数字
#include <windows.h>
#include <iostream>
#define MAX_THREADS 1
using namespace std;
DWORD WINAPI Prime (LPVOID);
HANDLE hThreads [MAX_THREADS];
DWORD id [MAX_THREADS];
DWORD waiter;
DWORD WINAPI Prime(LPVOID Param)
{
DWORD Number = *(DWORD*)Param;
for (DWORD i=0;i<=Number;i++)
{
if((Number%2==0) ||(Number%3==0) || (Number%4==0)||(Number%5==0)||(Number%6==0)|| (Number%7==0)||(Number%8==0)||(Number%9==0))
cout <<"";
else
cout<<i;
}
return 0;
}
int main(int argc, char* argv[ ])
{
DWORD ThreadId;
HANDLE ThreadHandle;
int Param;
cout<<"Enter a number:";
cin>>Param;
cout<<"Prime numbers less than and equal to your number";
ThreadHandle=CreateThread(NULL,0,Prime,&Param,0,&ThreadId);
waiter=WaitForMultipleObjects(MAX_THREADS,hThreads,TRUE,INFINITE);
for(int i=0;i<MAX_THREADS;i++)
CloseHandle(hThreads[i]);
system ("pause");
return 0;
}
我一直在用我在课堂上学到的东西来编写这个程序,但我似乎无法让我的程序发挥作用。如果有人能帮助我清理我的程序并帮助我使其发挥作用,我将不胜感激。
因为您检查所有2到9之间的整数的可除性,所以您的程序不会报告任何小于11的素数。i
只用于循环中的打印目的,而根本不用于寻找素数。
您检查素数的方法是错误的!我添加了一个检查素数的功能
#include <windows.h>
#include <iostream>
#define MAX_THREADS 1
using namespace std;
DWORD WINAPI Prime (LPVOID);
HANDLE hThreads [MAX_THREADS];
DWORD id [MAX_THREADS];
DWORD waiter;
int check_prime(int a)
{
int c;
for ( c = 2 ; c <= a - 1 ; c++ )
{
if ( a%c == 0 )
return 0;
}
if ( c == a )
return 1;
}
DWORD WINAPI Prime(LPVOID Param)
{
DWORD Number = *(DWORD*)Param;
for (DWORD i=2;i<=Number;i++)
{
if(check_prime(i)==0)
cout <<"";
else
cout<<i;
}
return 0;
}
int main(int argc, char* argv[ ])
{
// same your code
return 0;
}
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 在C++中使用线程查找友好号码比单个线程花费更多时间
- 由并发无序映射查找线程调用的函数是否安全?
- 了解多线程.试图制作一个素数查找器
- 查找使用并行线程加总数的所有组合
- 在多线程环境中使用 libcurl 会导致与 DNS 查找相关的性能非常慢
- 查找称为函数C 的线程ID
- 查找最低值.功能.错误:线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x7fff5fc89000)
- 从内存转储中查找线程消息队列中的消息
- 使用TID查找线程
- 在运行时查找特定线程的CPU核心
- 在 GDB 中调试多线程服务器 - 查找每个线程的状态.执行时继续并停止
- C Simple RingBuffer语言 - 多线程 - 查找关键部分
- 在单独的线程中查找素数
- 是对std::map线程安全的查找和读取操作
- 一种使用多线程在巨大树形结构中查找文件的方法
- C++从线程 ID 列表中查找 GUI 线程
- C ++挂钩到不同的应用程序,如何从进程ID中查找线程ID