예제 #1
0
 void drop ( common::connection_iface *c )
 {
     upgradable_lock lck(clients_lock_);
     client_map_type::iterator f(clients_.find(c));
     if( f != clients_.end( )) {
         upgrade_to_unique ulck(lck);
         clients_.erase( f );
     }
 }
예제 #2
0
// ##############################################################################################################
void jevois::Camera::get(jevois::RawImage & img)
{
  JEVOIS_TRACE(4);

  {
    std::unique_lock<std::mutex> ulck(itsOutputMtx);
    itsOutputCondVar.wait(ulck, [&]() { return itsOutputImage.valid() || itsStreaming.load() == false; });
    if (itsStreaming.load() == false) { LDEBUG("Not streaming"); throw std::runtime_error("Camera not streaming"); }
    img = itsOutputImage;
    itsOutputImage.invalidate();
  }
  
  LDEBUG("Camera image " << img.bufindex << " handed over to processing");
}
예제 #3
0
void ClientSystem::TransferOutgoingMessagesTo( MessageList::Messages_t& messages )
{
    if (mThreaded)
    {
        std::unique_lock<std::mutex> ulck( mMessageHolder.GetOutgoingMessages().GetMutex() );
        if (!mMessageHolder.GetOutgoingMessages().HasPublishedMessages())
        {
            mMessageHolder.GetOutgoingMessages().GetCV().wait_for( ulck, std::chrono::milliseconds( mWaitMillisecs ) );
        }
        mMessageHolder.GetOutgoingMessages().TransferPublishedMessagesTo( messages );
    }
    else
    {
        mMessageHolder.GetOutgoingMessages().TransferPublishedMessagesTo( messages );
    }
}