int main(int argc, char *argv[]) { std::cout << "built " << __DATE__ << " " << __TIME__ << std::endl; TestConfig::Config config; if (!TestConfig::parseArgs(argc, argv, config)) { TestConfig::usage(prog); } eprosima::Log::setVerbosity(eprosima::VERB_ERROR); Resources resources; std::cout << "create participant" << std::endl; ParticipantAttributes partAttr; partAttr.rtps.builtin.use_SIMPLE_RTPSParticipantDiscoveryProtocol = true; partAttr.rtps.builtin.use_SIMPLE_EndpointDiscoveryProtocol = true; partAttr.rtps.builtin.m_simpleEDP.use_PublicationReaderANDSubscriptionWriter = true; partAttr.rtps.builtin.m_simpleEDP.use_PublicationWriterANDSubscriptionReader = true; partAttr.rtps.builtin.domainId = 80; partAttr.rtps.builtin.leaseDuration = toTime(config.lease_s); partAttr.rtps.builtin.leaseDuration_announcementperiod = toTime(config.renew_s); partAttr.rtps.setName(prog); Participant *part = Domain::createParticipant(partAttr); if (part == nullptr) { std::cerr << "error" << std::endl; exit(1); } Domain::registerType(part, &topicDataType); std::cout << "create publisher" << std::endl; PublisherAttributes pubAttr; pubAttr.topic.topicKind = NO_KEY; pubAttr.topic.topicName = TopicData::topicName; pubAttr.topic.topicDataType = TopicData::topicType; pubAttr.topic.historyQos.kind = KEEP_LAST_HISTORY_QOS; pubAttr.topic.historyQos.depth = config.history; pubAttr.topic.resourceLimitsQos.max_samples = 2 * config.history; pubAttr.topic.resourceLimitsQos.allocated_samples = 2 * config.history; pubAttr.times.heartbeatPeriod = toTime(0.100); pubAttr.qos.m_reliability.kind = config.reliable ? RELIABLE_RELIABILITY_QOS : BEST_EFFORT_RELIABILITY_QOS; Publisher *pub = Domain::createPublisher(part, pubAttr, &testPublisherListener); if (pub == nullptr) { std::cerr << "error" << std::endl; exit(1); } std::chrono::steady_clock::time_point timeZero = std::chrono::steady_clock::now(); std::chrono::steady_clock::time_point pubNext = timeZero; std::chrono::steady_clock::duration pubInterval = std::chrono::steady_clock::duration(std::chrono::nanoseconds(1000000000ull / config.rate)); std::chrono::steady_clock::time_point printNext = timeZero; std::chrono::steady_clock::duration printInterval = std::chrono::steady_clock::duration(std::chrono::seconds(config.print_s)); std::cout << "ready" << std::endl; uint32_t sequence = 0; while (config.count != 0) { std::this_thread::sleep_until(pubNext); TopicData topicData; memset(&topicData, 0, sizeof(TopicData)); pub->write((void *)&topicData); if (pubNext >= printNext) { resources.sample(); double cpu = resources.cpuLoad(); std::ios::fmtflags f(std::cout.flags()); // save state std::cout << std::setw(18) << std::left << prog << std::right << " " << std::setw(10) << std::fixed << std::setprecision(3) << toDouble(pubNext - timeZero) << ": " << std::setw(6) << sequence << " " << std::setw(5) << std::fixed << std::setprecision(1) << cpu * 100.0 << "%" << std::endl; std::cout.flags(f); // restore state printNext += printInterval; } sequence++; pubNext += pubInterval; if (config.count > 0) config.count--; } // while (config.count != 0) Domain::removePublisher(pub); Domain::removeParticipant(part); return 0; } // main