どのようにしてオブジェクトのstd :: vectorを作成できますか?各オブジェクトにはboost :: threadが内部にカプセル化されています。std :: boost :: threadでエンコードされたオブジェクトのベクトルはinsde
class INSTRUMENT {
public:
INSTRUMENT() : m_thread(new boost::thread(&INSTRUMENT::Start, this)) {
x = "abc";
}
~INSTRUMENT() {}
void Start();
public:
std::string x;
boost::shared_ptr<boost::thread> m_thread;
};
void INSTRUMENT::Start() {
try {
while (1) {
boost::this_thread::interruption_point();
std::cout << "here " << x << std::endl;
}
} catch (boost::thread_interrupted &thread_e) {
std::cout << "exit " << x << std::endl;
} catch (std::exception &e) {
}
}
std::vector<INSTRUMENT> m_inst_vector;
for (int i = 0; i < 5; i++) {
m_inst_vector.push_back(INSTRUMENT());
}
コードは正常にコンパイルされますが、出力は「abc」ではなく、ほんの一部のガベージです。デバッグでは、.Push_back()が呼び出されるたびに〜INSTRUMENT()が呼び出されることがわかりました。
現在のデザインの制限のため、boost :: group_threadを使用しないようにしました。内部にスレッドを持つオブジェクトのstd :: vectorを持つことが可能かどうか、または同様のデザインへの提案が非常に役に立ちます。
私はSOで同様のスレッドを見つける。コンパイラでサポートされているmove-semanticsについて言及しましたが、それが何であるか説明しませんでした。 How can I add boost threads to a vector
ありがとうございます。
私の答えを編集しました。 – vz0