/* * beginLawnmowerThread * Starts the lawnmower code. */ bool beginLawnmowerThread() { if ( thread_1.timed_join(boost::posix_time::milliseconds(10)) ) { cout << "\033[36m[THRIFT]\033[0m Beginning lawnmower thread." << endl; if (waypoints_list.size() != 2) { cout << "\033[31m[THRIFT]\033[0m Cannot start lawnmower without boundaries!" << endl; return false; } Pos corner1; Pos corner2; corner1.lat = waypoints_list.front().lat; corner1.lon = waypoints_list.front().lon; corner2.lat = waypoints_list.back().lat; corner2.lon = waypoints_list.back().lon; usingWindows = false; exitProgram = false; userState = -1; thread_1 = boost::thread(run_lawnmower, boost::ref(fb), boost::ref(gps), boost::ref(imu), boost::ref(buzzer), corner1, corner2); return true; } else { cout << "\033[31m[THRIFT]\033[0m Cannot start lawnmower, copter is flying." << endl; return false; } }
/* * beginUserTrackingThread * Starts the user tracking thread. */ bool beginUserTrackingThread() { if ( thread_1.timed_join(boost::posix_time::milliseconds(10)) ) { cout << "\033[36m[THRIFT]\033[0m Beginning user tracking thread." << endl; exitProgram = false; userState = -1; thread_1 = boost::thread(userTracking, boost::ref(fb), boost::ref(gps), boost::ref(imu), boost::ref(buzzer), boost::ref(logs), boost::ref(user_position)); return true; } else { cout << "\033[31m[THRIFT]\033[0m Cannot start user tracking, copter is flying." << endl; return false; } }
/* * beginWaypointsThread * Starts the waypoints code looping. */ bool beginWaypointsThread() { if ( thread_1.timed_join(boost::posix_time::milliseconds(10)) ) { cout << "\033[36m[THRIFT]\033[0m Beginning waypoints thread." << endl; exitProgram = false; userState = -1; thread_1 = boost::thread(waypointsFlightLoop, boost::ref(fb), boost::ref(gps), boost::ref(imu), boost::ref(buzzer), boost::ref(logs), waypoints_list); return true; } else { cout << "\033[31m[THRIFT]\033[0m Cannot start waypoints, copter is flying." << endl; return false; } }
void nuke_ms::clientnode::catchThread(boost::thread& thread, unsigned threadwait_ms) { // a thread id that compares equal to "not-a-thread" boost::thread::id not_a_thread; try { // give the thread a few seconds time to join thread.timed_join(boost::posix_time::millisec(threadwait_ms)); } catch(...) {} // if the thread finished, return. otherwise try to kill the thread if (thread.get_id() == not_a_thread) return; thread.interrupt(); // if it is still running, let it go if (thread.get_id() == not_a_thread) return; thread.detach(); }
void join(unsigned val){///Join thread after specified time in seconds m_Thread.timed_join(( boost::posix_time::time_duration(0,0,val,int(boost::posix_time::time_duration::ticks_per_second() / 10)))); UpdateStats(new string("Thread has been doing something for: "+ Conv::TimeToString(Time::TimeDiff(*blt_ldt_Start)))); }