ユーザーが書き込むすべての番号を最初から最後まで印刷するためにコードを書きます。私はスレッドでこれをやりたいたとえば、beginは1、endは100です。ユーザに、プログラムが作成するスレッドの数であるN数を入力するよう依頼します。たとえば、彼が10に入ると、プログラムは10スレッドを作成します。最初のスレッドは1から10までの素数を出力します。2番目のスレッドは10から20までの素数を出力します.030から30と3番目のスレッドはスレッド番号の素数
です。実際には、私のプログラムは、素数ではないファイル内の多くの数値を出力します。それより多くの場合、コード内で何度も同じ数のコードを持っています。
これは私のコードです:メインで
void writePrimesToFile(int begin, int end, ofstream& file)
{
for (int i = begin; i <= end; i++)
{
for (int j = begin; j < end/2; j++)
{
if (i % j != 0)
{
file << i << endl;
}
}
}
}
void callWritePrimesMultipleThreads(int begin, int end, string filePath, int N)
{
ofstream myfile(filePath);
clock_t startTimer, stopTimer;
startTimer = clock();
vector<thread> arr;
for (int i = 0; i < N; i++)
{
int start = begin;
int finish = N;
arr.emplace_back(writePrimesToFile, start, finish, ref(myfile));
start = finish;
finish += N;
}
for (auto& thread : arr)
{
thread.join();
}
stopTimer = clock();
cout << "The time that takes is: " << (double)(stopTimer - startTimer)/CLOCKS_PER_SEC << endl;
}
コード:
callWritePrimesMultipleThreads(1, 100, "primes2.txt", 10);
デバッガの使用時に何を観察しましたか? –
'if(i%j!= 0)'が正しく表示されない – NathanOliver
@AlgirdasPreidžiusエラーを解決するのに役立つもの。 –