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 时遇到过这个问题,你真的不应该这样工作。这是一个错误陷阱。

经过两天的搜索,我找到了这个解决方案 http://connect.microsoft.com/VisualStudio/feedback/details/753623/fatal-error-c1001

请确保您了解如何正确使用 pragma。我能够编译和运行!

希望这可以帮助。

于 2013-02-26T14:02:24.900 回答