本文整理匯總了C++中ACE_GUARD函數的典型用法代碼示例。如果您正苦於以下問題:C++ ACE_GUARD函數的具體用法?C++ ACE_GUARD怎麽用?C++ ACE_GUARD使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了ACE_GUARD函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: AddNewSockets
void AddNewSockets()
{
ACE_GUARD(ACE_Thread_Mutex, Guard, m_NewSockets_Lock);
if (m_NewSockets.empty())
return;
for (SocketSet::const_iterator i = m_NewSockets.begin(); i != m_NewSockets.end(); ++i)
{
WorldSocket* sock = (*i);
if (sock->IsClosed())
{
sock->RemoveReference();
--m_Connections;
}
else
m_Sockets.insert(sock);
}
m_NewSockets.clear();
}
示例2: ACE_GUARD
void
Client_Service_Handler::handle_write_stream (
const ACE_Asynch_Write_Stream::Result &result)
{
ACE_GUARD (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->mtx_);
this->pending_writes_--;
if (!result.success () || 0 == result.bytes_transferred ())
{
// Error
result.message_block ().release ();
ACE_DEBUG ((LM_DEBUG, ACE_TEXT (
"Client_Service_Handler::handle_write_stream: error: %d\n"),
result.error ()));
this->cancel_and_close ();
}
else if (result.bytes_transferred () < result.bytes_to_write ())
{
// More to write...
if (this->write (result.message_block(),
result.bytes_to_write () - result.bytes_transferred ()) < 0)
{
result.message_block ().release ();
this->cancel_and_close ();
}
}
else
{
// Wrote it all
result.message_block ().release ();
}
}
示例3: ASSERT
void ObjectAccessor::RemoveCorpse(Corpse* corpse)
{
ASSERT(corpse && corpse->GetType() != CORPSE_BONES);
//TODO: more works need to be done for corpse and other world object
if (Map* map = corpse->FindMap())
{
corpse->DestroyForNearbyPlayers();
if (corpse->IsInGrid())
map->Remove(corpse, false);
else
{
corpse->RemoveFromWorld();
corpse->ResetMap();
}
}
else
corpse->RemoveFromWorld();
// Critical section
{
//TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
ACE_GUARD(LockType, g, i_corpseGuard);
Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID());
if (iter == i_player2corpse.end()) // TODO: Fix this
return;
CellPair cell_pair = Trinity::ComputeCellPair(corpse->GetPositionX(), corpse->GetPositionY());
uint32 cell_id = (cell_pair.y_coord * TOTAL_NUMBER_OF_CELLS_PER_MAP) + cell_pair.x_coord;
// build mapid*cellid -> guid_set map
CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
// sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), GUID_LOPART(corpse->GetOwnerGUID()));
sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cell_id, GUID_LOPART(corpse->GetOwnerGUID()));
i_player2corpse.erase(iter);
}
}
示例4: ACE_GUARD
void
LiveEntry::status (LiveStatus l)
{
{
ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
this->liveliness_ = l;
if (l == LS_ALIVE)
{
ACE_Time_Value now (ACE_High_Res_Timer::gettimeofday_hr());
this->next_check_ = now + owner_->ping_interval();
}
if (l == LS_TRANSIENT && !this->reping_available())
{
this->liveliness_ = LS_LAST_TRANSIENT;
}
}
this->update_listeners ();
if (this->listeners_.size() > 0)
{
if (ImR_Locator_i::debug () > 2)
{
ORBSVCS_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) LiveEntry::status change, ")
ACE_TEXT ("server = %C status = %s\n"),
this->server_.c_str(),
status_name (this->liveliness_)));
}
this->owner_->schedule_ping (this);
}
else
{
if (this->owner_->remove_per_client_entry (this))
{
delete (this);
}
}
}
示例5: ACE_GUARD
void
TAO_Object_Adapter::close (int wait_for_completion)
{
this->check_close (wait_for_completion);
// Shutting down the ORB causes all object adapters to be destroyed,
// since they cannot exist in the absence of an ORB. Shut down is
// complete when all ORB processing (including request processing
// and object deactivation or other operations associated with
// object adapters) has completed and the object adapters have been
// destroyed. In the case of the POA, this means that all object
// etherealizations have finished and root POA has been destroyed
// (implying that all descendent POAs have also been destroyed).
TAO_Root_POA *root = 0;
#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
TAO_POAManager_Factory* factory = 0;
#endif
{
ACE_GUARD (ACE_Lock, ace_mon, this->lock ());
if (this->root_ == 0)
return;
root = this->root_;
this->root_ = 0;
#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
if (this->poa_manager_factory_ == 0)
return;
factory = this->poa_manager_factory_;
this->poa_manager_factory_ = 0;
#endif
}
CORBA::Boolean etherealize_objects = true;
root->destroy (etherealize_objects, wait_for_completion);
::CORBA::release (root);
#if (TAO_HAS_MINIMUM_POA == 0) && !defined (CORBA_E_COMPACT) && !defined (CORBA_E_MICRO)
release_poa_manager_factory (factory);
#endif
}
示例6: ACE_GUARD
void ObjectAccessor::Update(uint32 /*diff*/) {
UpdateDataMapType update_players;
// Critical section
{
ACE_GUARD(LockType, g, i_updateGuard);
while (!i_objects.empty()) {
Object* obj = *i_objects.begin();
ASSERT(obj && obj->IsInWorld());
i_objects.erase(i_objects.begin());
obj->BuildUpdate(update_players);
}
}
WorldPacket packet; // here we allocate a std::vector with a size of 0x10000
for (UpdateDataMapType::iterator iter = update_players.begin();
iter != update_players.end(); ++iter) {
iter->second.BuildPacket(&packet);
iter->first->GetSession()->SendPacket(&packet);
packet.clear(); // clean the string
}
}
示例7: ORBSVCS_DEBUG
void
CC_LockSet::unlock (CosConcurrencyControl::lock_mode mode)
{
ORBSVCS_DEBUG ((LM_DEBUG,
"CC_LockSet::unlock\n"));
CC_LockModeEnum lm = lmconvert (mode);
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mlock_);
if (lock_[lm] == 0) // This lock is not held.
throw CosConcurrencyControl::LockNotHeld();
else
lock_[lm]--;
// If we do not have a lock held in a weaker mode than the
// strongest held and we have requests on the semaphore signal
// the semaphore.
while (lock_queue_.size () > 0)
{
CC_LockModeEnum lock_on_queue = CC_EM;
lock_queue_.dequeue_head (lock_on_queue);
if (compatible (lock_on_queue) == 1)
{
if (semaphore_.release () == -1)
throw CORBA::INTERNAL ();
lock_[lock_on_queue]++;
}
else
{
lock_queue_.enqueue_head (lock_on_queue);
break;
}
}
this->dump ();
}
示例8: throw
void P3LeafMesh::createRemoteService(const SAPInfo* hint, const UUIDPtr& uuid, const UUIDPtr& sid, ServiceParamsPtr& params, UUIDPtr& iid) throw (ServiceException&) {
ACE_GUARD(ACE_SYNCH_RECURSIVE_MUTEX, ace_mon, m_lock);
if (hint == 0) {
throw ServiceException(ServiceException::SERVICE_WITHOUT_IMPL);
}
Endpoint endpoint;
ACE_Connector<P3MeshClientHandler, ACE_SOCK_Connector> connector;
hint->getFirstEndpoint(endpoint);
QoSEndpoint qosE = *(endpoint.getQoS());
UUIDPtr runtimeUUID;
getUUID(runtimeUUID);
UUIDPtr fid;
getFID(fid);
P3MeshClientHandler* clientHandler = new P3MeshClientHandler(
runtimeUUID,
fid,
qosE,
false, false, 0, 0, 0, 0);
if (connector.connect(clientHandler, endpoint.getAddr()) == -1) {
ACE_ERROR((LM_ERROR, ACE_TEXT("(%T)%@\n"),
ACE_TEXT("(%T)ERROR: P3Mesh::createRemoteService - connect failed:")));
clientHandler->close();
clientHandler = 0;
delete clientHandler;
} else {
ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%t|%T)INFO: P3LeafMesh::createRemoteService - Connect OK!\n")));
}
int ret = clientHandler->createService(params, iid);
clientHandler->close();
delete clientHandler;
if (ret == -1) {
ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%t|%T)INFO: P3LeafMesh::createRemoteService - failed to create, not enough resources\n")));
throw ServiceException(ServiceException::INSUFFICIENT_RESOURCES);
}
ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%t|%T)INFO: P3LeafMesh::createRemoteService - service created!\n")));
}
示例9: ACE_GUARD
void
TAO_CEC_MT_Dispatching::activate (void)
{
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
if (this->active_ != 0)
return;
this->active_ = 1;
if (this->task_.activate (this->thread_creation_flags_,
this->nthreads_,
1,
this->thread_priority_) == -1)
{
if (this->force_activate_ != 0)
{
if (this->task_.activate (THR_BOUND, this->nthreads_) == -1)
ORBSVCS_ERROR ((LM_ERROR,
"EC (%P|%t) cannot activate dispatching queue"));
}
}
}
示例10: ACE_GUARD
template <class ACE_LOCK, class ALLOCATOR> void
ACE_Timeprobe_Ex<ACE_LOCK, ALLOCATOR>::timeprobe (u_long event)
{
ACE_GUARD (ACE_LOCK, ace_mon, this->lock_);
this->timeprobes_[this->current_size_].event_.event_number_ = event;
this->timeprobes_[this->current_size_].event_type_ = ACE_timeprobe_t::NUMBER;
this->timeprobes_[this->current_size_].time_ = ACE_OS::gethrtime ();
this->timeprobes_[this->current_size_].thread_ = ACE_OS::thr_self ();
++this->current_size_;
#if !defined (ACE_TIMEPROBE_ASSERTS_FIXED_SIZE)
// wrap around to the beginning on overflow
if (this->current_size_ >= this->max_size_)
{
this->current_size_ = 0;
this->report_buffer_full_ = 1;
}
#endif /* ACE_TIMEPROBE_ASSERTS_FIXED_SIZE */
ACE_ASSERT (this->current_size_ < this->max_size_);
}
示例11: ACE_GUARD
void
TAO_Notify_ThreadPool_Supplier::subscription_change (const CosNotification::EventTypeSeq & added,
const CosNotification::EventTypeSeq & /*removed */
)
{
ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
// Count the number of consumers connect and signal the supplier thread when the expected count have connected.
// Only 1 consumer connects at a time.
if (added.length () > 0)
{
// Set the domain and type nams in the event's fixed header.
this->event_[consumer_count_].header.fixed_header.event_type.domain_name = CORBA::string_dup(added[0].domain_name);
this->event_[consumer_count_].header.fixed_header.event_type.type_name = CORBA::string_dup(added[0].type_name);
++this->consumer_count_;
ACE_DEBUG ((LM_DEBUG, "(%P,%t) Received Type %d: (%s)\n", this->consumer_count_, added[0].type_name.in ()));
if (this->consumer_count_ == this->expected_consumer_count_)
this->consumers_connected_.signal ();
}
}
示例12: ACE_GUARD
void
Client_Service_Handler::open (ACE_HANDLE h, ACE_Message_Block&)
{
ACE_GUARD (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->mtx_);
if (this->ssl_stream_.open (*this, h, 0, this->proactor ()) != 0)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT (
"Client_Service_Handler::open: ACE_SSL_Asynch_Stream::open failed, %d\n"),
(int)errno));
this->cancel_and_close ();
}
else
{
ACE_Message_Block *mb = 0;
ACE_NEW_NORETURN(mb, ACE_Message_Block (DATA_SIZE));
if (this->read_data () < 0 || this->write_data () < 0)
{
this->cancel_and_close ();
}
}
}
示例13: ACE_GUARD
TAO_CEC_ProxyPushConsumer_Guard::
~TAO_CEC_ProxyPushConsumer_Guard (void)
{
// This access is safe because guard objects are created on the
// stack, only one thread has access to them
if (!this->locked_)
return;
{
ACE_GUARD (ACE_Lock, ace_mon, *this->lock_);
// If the guard fails there is not much we can do, raising an
// exception is wrong, the client has *no* way to handle that kind
// of error. Even worse, there is no exception to raise in that
// case.
// @@ Returning something won't work either, the error should be
// logged though!
--this->refcount_;
if (this->refcount_ != 0)
return;
}
this->event_channel_->destroy_proxy (this->proxy_);
}
示例14: INET_TRACE
void ConnectionCache::close_all_connections()
{
INET_TRACE ("ConnectionCache::close_all_connections");
ACE_MT (ACE_GUARD (ACE_SYNCH_MUTEX,
guard_,
this->lock_));
map_iter_type iter = this->cache_map_.end ();
for (iter = this->cache_map_.begin ();
iter != this->cache_map_.end ();
++iter)
{
if ((*iter).int_id_.state () == ConnectionCacheValue::CST_CLOSED)
{
connection_type* conn = (*iter).int_id_.connection ();
(*iter).int_id_.connection (0);
(*iter).int_id_.state (ConnectionCacheValue::CST_CLOSED);
delete conn;
}
}
this->cache_map_.unbind_all ();
}
示例15: ACE_GUARD
void WorldLog::outLog(char const *fmt, ...) {
if (LogWorld()) {
ACE_GUARD(ACE_Thread_Mutex, Guard, Lock);
ASSERT(i_file);
va_list args;
va_start(args, fmt);
vfprintf(i_file, fmt, args);
//fprintf(i_file, "\n");
va_end(args);
fflush(i_file);
}
if (sLog->GetLogDB() && m_dbWorld) {
va_list ap2;
va_start(ap2, fmt);
char nnew_str[MAX_QUERY_LEN];
vsnprintf(nnew_str, MAX_QUERY_LEN, fmt, ap2);
sLog->outDB(LOG_TYPE_WORLD, nnew_str);
va_end(ap2);
}
}