bool pimpl<Thread>::start(boost::function<void ()> runCallback) { OS_LOCK(m_cs); if(m_status != isReady) return false; m_status = isRunning; m_thread.reset(OS_NEW_T(boost::thread)(runCallback), os_delete_t()); return true; }
void NTPClient::responseCallback(const boost::system::error_code &e, size_t transferredBytes, const NTPTime &destinationTime, shared_ptr<ConnectionScope> scope) { scope->cancelTimeout(); if(e) throw boost::system::system_error(e); if(transferredBytes < sizeof(Packet)) OS_EXCEPTION("response error"); m_response.reset(OS_NEW_T(NTPResponse), os_delete_t()); m_response->stratum = m_responsePacket.basic.stratum; m_response->leap_indicator = (m_responsePacket.basic.liVnMode & 0xC0) >> 6; m_response->originate_time = m_responsePacket.basic.originate_time; m_response->receive_time = m_responsePacket.basic.receive_time; m_response->transmit_time = m_responsePacket.basic.transmit_time; m_response->roundtrip_delay = (destinationTime - m_response->originate_time) - (m_response->transmit_time - m_response->receive_time); m_response->localclock_offset = ((m_response->receive_time - m_response->originate_time) + (m_response->transmit_time - destinationTime)) / 2; }
uint32 EntitiesEntity::getChildsCount(const shared_ptr<IPortalDatabase> &database, const ObjectsTypes &types, shared_ptr<DbSqlSelect> select) const { OS_ASSERT(select == nullptr || select->count); // Se stata specificata una select valida dovrebbe essere di conteggio OS_LOCK(m_cs); String sql; // Genera l'sql di caricamento dei figli _getSql(database, types, RangeUint32::EMPTY, true, select, sql); String childsKey = getChildsKey(types); ChildCounterMap::iterator i = m_countersMap.find(childsKey); // Controlla se il totale gi stato caricato in precedenza if(i != m_countersMap.end()) { // Verifica che l'sql utilizzata in precedenza coincida con quella richiesta if(i->second->sql == sql) { return i->second->count; } else { // Resetta il calcolo precedente m_countersMap.erase(i); } } uint32 count = 0; DataTable result; if(database->execute(sql, result)) count = *result[0][0]; m_countersMap[childsKey] = shared_ptr<ChildsInfo>(OS_NEW_T(ChildsInfo(count, sql)), os_delete_t()); return count; }
IRCRoom::IRCRoom(shared_ptr<IIRCTarget> target) : m_target(target), m_cs(OS_NEW_T(boost::recursive_mutex), os_delete_t()), m_modified(true) // Notifica lo stato iniziale { OS_ASSERT(target != nullptr); }