@@ -85,7 +85,8 @@ class foo
8585// -----------------------------------------------------------------------------------------
8686int main (int argc, char *argv[])
8787{
88- int interval{100 }, fcnt{-1 }, sleepval{50 };
88+ constexpr int sleep_default{50 }, interval_default{100 };
89+ int interval{interval_default}, fcnt{-1 }, sleepval{sleep_default}, val;
8990 bool lorder{true }, skip{true };
9091 fiber_monitor::sort_mode sm{ fiber_monitor::sort_mode::by_ms };
9192
@@ -98,45 +99,33 @@ int main(int argc, char *argv[])
9899 { " fibers" , 1 , 0 , ' f' }, { " mode" , 1 , 0 , ' m' }
99100 }};
100101
101- for ( int opt; (opt = getopt_long (argc, argv, optstr, long_options.data (), 0 )) != -1 ; )
102+ while ((val = getopt_long (argc, argv, optstr, long_options.data (), 0 )) != -1 )
102103#else
103- for ( int opt; (opt = getopt (argc, argv, optstr)) != -1 ; )
104+ while ((val = getopt (argc, argv, optstr)) != -1 )
104105#endif
105106 {
106107 try
107108 {
108- switch (opt )
109+ switch (val )
109110 {
110- case ' f' :
111- fcnt = std::stoi (optarg);
112- break ;
113- case ' s' :
114- sleepval = std::stoi (optarg);
115- break ;
116111 case ' m' :
117112 if (long unsigned ism{ std::stoul (optarg) - 1UL }; ism < static_cast <long unsigned >(fiber_monitor::sort_mode::count))
118113 sm = fiber_monitor::sort_mode (ism);
119114 break ;
120- case ' r' :
121- fibers::set_flag (global_fiber_flags::retain);
122- break ;
123- case ' k' :
124- skip = false ;
125- break ;
126- case ' o' :
127- lorder = false ;
128- break ;
129- case ' i' :
130- interval = std::stoi (optarg);
131- break ;
115+ case ' f' : fcnt = std::stoi (optarg); break ;
116+ case ' s' : sleepval = std::stoi (optarg); break ;
117+ case ' r' : fibers::set_flag (global_fiber_flags::retain); break ;
118+ case ' k' : skip ^= true ; break ;
119+ case ' o' : lorder ^= true ; break ;
120+ case ' i' : interval = std::stoi (optarg); break ;
132121 case ' ?' :
133122 case ' :' :
134123 case ' h' :
135124 std::cout << " Usage: " << argv[0 ] << " -[" << optstr << R"( ]
136- -i,--interval interval msecs (default 100 )
125+ -i,--interval interval msecs (default )" << interval << R"( )
137126 -f,--fibers fiber count (default )" << (fiber_monitor::get_terminal_dimensions ().second - 4 ) << R"( )
138- -s,--sleep sleep msecs (default 50 )
139- -m,--mode sort mode )" << fiber_monitor::sort_help () << R"( ( default 3 )
127+ -s,--sleep sleep msecs (default )" << sleepval << R"( )
128+ -m,--mode sort mode )" << fiber_monitor::sort_help () << " ( default " << ( static_cast < long unsigned >(sm) + 1 ) << R"( )
140129 -o,--order no launch order
141130 -k,--noskip no skip main
142131 -r,--interval retain finished fibers
@@ -166,16 +155,13 @@ int main(int argc, char *argv[])
166155 &foo::func, &bar, 2 * (ii + 1 )))->set_params (" sub" s + std::to_string (ii));
167156 }
168157
169- while ( fibers::has_fibers () )
158+ fibers::wait_all ([&fm]( )
170159 {
171- this_fiber::yield ();
172160 if (!fm)
173- {
174161 fibers::kill_all ();
175- break ;
176- }
177- }
162+ return !fm;
163+ });
178164 fm.update ();
179- std::this_thread::sleep_for (1s );
165+ std::this_thread::sleep_for (2s );
180166 return 0 ;
181167}
0 commit comments