コンストラクターで終了しない while ループを配置することをお勧めしますか? または、同じ結果を得るためにスレッドを使用する必要がありますか? コンストラクターが決して終了しないのは良いことですか? それとも、セグメンテーション違反を回避する方が安全ですか?
あなたが私の悪い英語を理解してくれることを願っています..
コンストラクターで終了しない while ループを配置することをお勧めしますか? または、同じ結果を得るためにスレッドを使用する必要がありますか? コンストラクターが決して終了しないのは良いことですか? それとも、セグメンテーション違反を回避する方が安全ですか?
あなたが私の悪い英語を理解してくれることを願っています..
コンストラクターが終了しない場合、オブジェクトは存在しません。そのため、コンストラクターに while(1) ループを配置すると、そのコンストラクターを使用してオブジェクトが作成されなくなります。これによりどのような問題が解決すると思われるかを説明する必要があります。
コンストラクターで終了しない while ループを配置することをお勧めしますか?
いいえ。
または、同じ結果を得るためにスレッドを使用する必要がありますか?
いいえ。
コンストラクターが決して終了しないのは良いことですか?
いいえ。
それとも、セグメンテーション違反を回避する方が安全ですか?
いいえ。
どのような問題を解決しようとしていますか?
コンストラクターからスレッドを生成することはまったく問題ありませんが、コンストラクターに無限ループを含めることはひどく悪い考えです。
コードでは、次は問題ありません。
void start_a_thread_with_a_loop()
{
while(1)
{
// consider a while(!stop_condition) or something
// do something in a loop
}
}
class x
{
public:
x()
{
start_a_thread_with_a_loop();
}
};
そして、以下は少なくとも悪い考えです:
class x
{
public:
x()
{
while(1)
{
}
}
};
ただし、ニールが指摘した理由により、そのようなオブジェクトを使用できない可能性が高いことは良いことです:)
コードが複数のスレッドを使用しているかどうか、または無限ループを含んでいるかどうかにかかわらず、コードでセグメンテーション違反を生成するべきではありません。
それらのどれも、セグメンテーション違反とは何の関係もありません。それらが発生した場合は、その問題を修正する必要があります
組み込みシステムでは、ほとんどの無限ループを回避する必要があります。それらは、時間指定またはカウントされた反復のいずれかである必要があります。ループが終了した場合は、エラー チェックを実行する必要があります。これにより、システムが「ロックアップ」されるのを防ぎます。
ルールの 1 つの例外は、バックグラウンド ループです。これは、イベントがチェックされ、マシンの実行を維持するメイン ループです。このループがなければ、マシンは単に終了または停止する可能性があります。