2013-02-26 2 views
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 и найти способ преодолеть эту ошибку. Я wokring с C# на VS2012 и C++ на VS2010. CLI также находится на VS2010.

любые предложения по использованию? мне нужно, чтобы он был кросс-платформенным и мог компилировать его в VS2010.

+0

В STL нет библиотеки параллельного программирования. Также не существует стандартной библиотеки C++ pre-C++ 11. – juanchopanza

+1

Используете ли вы самую последнюю версию Boost? –

+0

Какая версия boost вы используете? –

ответ

3

У меня была эта проблема в прошлом при смешивании VS2012 и VS2010, , вы действительно не должны работать так. это ловушка ошибок.

после двух дней поисков я нашел это решение http://connect.microsoft.com/VisualStudio/feedback/details/753623/fatal-error-c1001

пожалуйста, убедитесь, что вы знаете, как правильно использовать прагму. Я смог скомпилировать и запустить!

надеюсь, что это поможет.

+0

спасибо !!! 24 часа поиска – Gilad

4

Не относится к теме, но, пожалуйста, обратите внимание, что вы не ждете от переменной условия правильно: вы должны связать с ней состояние (булево в этом случае) и подождать в цикле. В противном случае ваш код может пропустить уведомление о состоянии и повесить навсегда, или получить ложное пробуждение и закончить ожидание преждевременно. См. http://www.boost.org/doc/libs/1_53_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref

+1

И вы должны использовать общий мьютекс для синхронизации ... –

+0

спасибо, я исправлю это. – Gilad