Используйте DllPlugin и DllReferencePlugin Wrong, когда vue / cli3.0

BOOST_INTERPROCESS_ENABLE_TIMEOUT_WHEN_LOCKING не так хорош. Он выдает исключение и не очень помогает. Чтобы обойти исключительное поведение, я написал этот макрос. Он работает просто хорошо для общего назначения. В этом примере используется named_mutex. Макрос создает фиксированную блокировку с таймаутом, и если блокировка не может быть получена по ИСКЛЮЧИТЕЛЬНЫМ причинам, она затем разблокирует ее. Таким образом, программа может заблокировать ее позже и не замерзает или не сработает сразу.

#define TIMEOUT 1000
#define SAFELOCK(pMutex) \
    boost::posix_time::ptime wait_time \
        = boost::posix_time::microsec_clock::universal_time() \
        + boost::posix_time::milliseconds(TIMEOUT); \
    boost::interprocess::scoped_lock<boost::interprocess::named_mutex> lock(*pMutex, wait_time); \
    if(!lock.owns()) { \
        pMutex->unlock(); }

Но даже это не оптимально, потому что код, который будет заблокирован, теперь запускается разблокирован один раз. Это может вызвать проблемы. Однако вы можете легко расширить макрос. Например. запускать код, только если lock.owns () является истинным.

0
задан user10926618 17 January 2019 в 08:14
поделиться