0

久しぶりにC++に戻ってきたので、スタイルでやりたかったので、最初にlibCinderに飛び込んで、今までめったにやったことのないことを始めました(それでも、さまざまな理由でQtを好んでいました。 )。この計画で何がうまくいかない可能性がありますか?

特に、デバッグプロファイルを使用してXcode内からコードを実行し、いくつかの安全ベルトをストラップで固定した場合(別名デバッガー)はほとんど機能しませんが、その後、ワイルドで厄介なことが起こります。ユーザーも取得します。興奮して、何かが十分にタイトではなく、最終的に私のアプリケーションは惨めにクラッシュします。

犯人をPilotStudyApp::draw()関数(https://github.com/Morpheu5/PilotStudyのコードを参照)に絞り込むことができました。おそらく最後のforループ、つまり_activePointsを通過するループの周りです。しかし、あなたがBTから見ることができるように私は確信が持てません

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libstdc++.6.dylib               0x914635e4 std::_Rb_tree_increment(std::_Rb_tree_node_base*) + 15
1   org.cinder.PilotStudy           0x000916b3 PilotStudyApp::draw() + 419
2   org.cinder.PilotStudy           0x000c34ad -[CinderView drawRect:] + 125

あなたがここで完全に見ることができること:http://pastebin.com/izZcFy8p

C ++-fu(またはその欠如)に何か問題があると強く感じているので、見落としているものを見つけていただければ、非常に感謝しています(Processingに行きたくないので、幼稚園に戻りたい気がします:)

編集:STLはスレッドセーフではない可能性があるので、同期またはローカルコピーの作成はおそらく解決する必要があると思いましたか?

4

2 に答える 2

1

効率上の理由から、SDLは組み込みの同期/相互排除を提供しません。マップの周りにミューテックスを追加すると、問題が修正されるはずです。

于 2012-12-16T18:50:35.327 に答える
0

@alexpが指摘したように、複数のスレッドからのSTLコンテナーからの同時読み取りとSTLコンテナーへの書き込みはサポートされていません。

ただし、Anthony Williamsの優れた記事( http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html)に従うと、生活が楽になります 。

あなたの便宜のために、私は彼の記事に基づいていくつかの並行コンテナクラスを書きました。それはここで見つけることができます: https ://github.com/paulhoux/Cinder-Samples/tree/master/FlickrImageViewer/include/ph

于 2013-05-06T15:29:12.453 に答える