21 template<
class Link,
class Operation>
23 fix_to_link::
main(
int argc,
char const *
const *argv,
boost::program_options::options_description &&all, Operation &&op)
noexcept(
true) {
24 using namespace libjmmcg;
26 using thread_traits=
typename link_t::thread_traits;
29 boost::program_options::variables_map vm;
30 boost::program_options::store(
boost::program_options::parse_command_line(argc, argv, all), vm);
31 if (vm.count(
"help")) {
35 if (vm.count(
"version")) {
36 std::cout<<
LIBJMMCG_DETAILED_VERSION_INFO " Built with FIX: " ISIMUD_FIX_EXCHANGE_VERSION ", MICs generated on: '" ISIMUD_ISO_10383_MIC_XML_GENERATED_DATE
"', currency-codes created on: '" ISIMUD_ISO_4217_CURRENCY_CODES_XML_GENERATED_DATE
"' and country-codes generated on: '" ISIMUD_ISO_3166_COUNTRY_CODES_XML_GENERATED_DATE
"'" <<
std::endl;
39 boost::program_options::notify(vm);
41 thread_traits::set_backtrace_on_signal();
42 auto const ctor_args=op(vm);
43 const std::size_t num_timestamps=vm[
"num_timings"].as<std::size_t>();
44 latency_timestamps timestamps
(num_timestamps
);
47 std::get<0>(ctor_args),
48 std::get<1>(ctor_args),
51 std::get<2>(ctor_args),
55 std::clog<<link<<
std::endl;
56 thread_traits::set_kernel_affinity(
57 thread_traits::get_current_thread(),
58 typename thread_traits::api_params_type::processor_mask_type(common
::thread_traits
::main_thread.core)
60 thread_traits::set_kernel_priority(
61 thread_traits::get_current_thread(),
64 while (!link.signal_status()) {
65 thread_traits::sleep(0);
67 std::clog<<link<<
std::endl;
71 }
catch (
std::exception
const &ex) {
72 std::cerr<<
"STL-derived exception. Details: "<<
boost::diagnostic_information(ex)<<
std::endl;
75 std::cerr<<
"Unknown exception."<<
std::endl;