Я использую Xcode 5.0 и увеличиваю 1.54. Следующий код компилируется с использованием Visual Studio 2008 Sp1, но не компилируется в Xcode:
template <class Rep, class Period>
bool try_lock_for(const boost::chrono::duration<Rep, Period> &_rel_time)
{
return m_mutex.try_lock_for(_rel_time);
}
Я получаю сообщение об ошибке "Нет члена с именем" try_lock_until "в" boost :: mutex "в Xcode.
Я включаю boost/mutex.hpp и boost/thread.hpp. Проект Xcode настроен на использование Apple LLVM 5.0 и диалогов GNU99 C++. Я получаю аналогичную ошибку компиляции, когда я использую "try_lock_until (...)".
Похоже, что boost :: mutex определяется по-разному на двух платформах. В Windows код выглядит следующим образом:
namespace detail
{
typedef ::boost::detail::basic_timed_mutex underlying_mutex;
}
class mutex:
public ::boost::detail::underlying_mutex
{
...
}
Итак, в Windows boost :: mutex наследуется от временного мьютекса, но на xcode его просто класс, который использует pthreads (без поддержки try_for и т.д.).
Каков правильный способ использования boost mutex (с try_for) для Windows и MacOS? Любая помощь будет оценена по достоинству.
хорошо, решил (легко исправить). Я заменил boost :: mutex на boost :: timed_mutex, и теперь VS2008 и Xcode компилируются без ошибок в коде.
TimedLockable
, вы должны использовать одну из ее моделей (например,timed_mutex
). Оказывается, что версияmutex
Windows также реализует эту концепцию, но это всего лишь деталь реализации - на нее не следует полагаться.