0

私はこのコードのプログラムを持っています:

mutable boost::condition_variable cvRun;

void CAteEngineInternal::RunSync()
{
    boost::mutex m;
    boost::unique_lock<boost::mutex> lock(m);
    Run();
    //wait for run to complete
    cvRun.wait(lock);
}

int  CAteEngineInternal::RunXSync(int FramesToRun)
{
    boost::mutex m;
    boost::unique_lock<boost::mutex> lock(m);
    int retVal = RunX(FramesToRun);
    //wait for run to complete
    cvRun.wait(lock);
    return retVal;
}


void CAteEngineInternal::OnRunCompleted(int /* status */)
{
    cvRun.notify_all();
}

CLIを使用していますが、次のエラーが発生します:
basic_timed_mutex.hpp(216):致命的なエラーC1001:コンパイラで内部エラーが発生しました

このboost::mutexコードを置き換えて、このコンパイラエラーを克服する方法を見つけたいと思います。VS2012ではC#、VS2010ではC++を使用しています。CLIはVS2010にもあります。

何を使うべきか提案はありますか?クロスプラットフォームであり、VS2010でコンパイルできる必要があります。

4

2 に答える 2

4

トピックから外れていますが、条件変数を正しく待機していないことに注意してください。状態(この場合はブール値)を関連付けて、ループで待機する必要があります。そうしないと、コードが状態通知を見逃して永久にハングしたり、誤ったウェイクアップを受け取って待機を途中で終了したりする可能性があります。http://www.boost.org/doc/libs/1_53_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_refを参照してください

于 2013-02-26T12:39:09.870 に答える
3

過去に VS2012 と VS2010 を混在させているときにこの問題が発生しましたが、実際にはこのように動作するべきではありません。バグトラップです。

2日間の検索の後、私はこの解決策を見つけました http://connect.microsoft.com/VisualStudio/feedback/details/753623/fatal-error-c1001

プラグマの正しい使い方を理解しておいてください。コンパイルして実行できました!

お役に立てれば。

于 2013-02-26T14:02:24.900 に答える