ループが実行されている次のサンプルプログラムについて考えてみます。
int main()
{
for (int i = 0; i<= 300; ++i) {
}
}
i
かなり基本的なことですが、今度は毎秒の値を出力したいとします。
cout << "i= " << i << "\n";
次のような単純なループで十分な場合があります。「elaspedTime」は、プログラムが実行されている秒数を含む架空の整数であり、OSによって魔法のように更新されます。
int lastTime = 0;
while (true) {
if (elapsedTime > lastTime) { // Another second has passed
cout << "i= " << "\n";
lastTime = elapsedTime;
}
}
ここでの最終的な目標は、次のような出力を提供することです(ループが、古くて遅いCPU上にあったため、ループが1秒間に正確に100回実行されたと仮定します)。
$ ./myprog
i= 100
i= 200
i= 300
これらは単純な関数とルーチンですが、それにもかかわらず、通常は関数だけを持つ「古典的な」c++プログラムでそのような操作を実行する方法はわかりませんmain()
。単純さにもかかわらず、これは私がマルチスレッドを学ぶ必要があるポイントですか?または、関数を呼び出しmain()
て、その戻りを待たずに、呼び出された関数がスレッドを「占有」しないようにすることは可能ですか?