rmw_ret_t rmw_take_with_info( const rmw_subscription_t * subscription, void * ros_message, bool * taken, rmw_message_info_t * message_info, rmw_subscription_allocation_t * allocation) { if (!message_info) { RMW_SET_ERROR_MSG("message info is null"); return RMW_RET_ERROR; } DDS::InstanceHandle_t sending_publication_handle; auto ret = _take(subscription, ros_message, taken, &sending_publication_handle, allocation); if (ret != RMW_RET_OK) { // Error string is already set. return RMW_RET_ERROR; } rmw_gid_t * sender_gid = &message_info->publisher_gid; sender_gid->implementation_identifier = rti_connext_identifier; memset(sender_gid->data, 0, RMW_GID_STORAGE_SIZE); auto detail = reinterpret_cast<ConnextPublisherGID *>(sender_gid->data); detail->publication_handle = sending_publication_handle; return RMW_RET_OK; }
rmw_ret_t rmw_take( const rmw_subscription_t * subscription, void * ros_message, bool * taken, rmw_subscription_allocation_t * allocation) { return _take(subscription, ros_message, taken, nullptr, allocation); }
/** * TODO * * @param id */ void scaling::threadpool::_exec_thread(uint8_t id) { std::function<void(void)> curr; while(_running) { if((curr = _take()) != NULL) { curr(); curr = NULL; } } }