int main(int argc, char **argv) { nodeid = get_my_ip(); parse_cli(argc,argv); if(nodeid == 0) { fprintf(stderr, "Could not determine host address, use -n <ip>\n"); exit(-1); } signal(SIGPIPE, SIG_IGN); if(foreground) { fqd_config_init(nodeid, config_path, queue_path); listener_thread(NULL); exit(0); } else { int pid, fd; /* Handle stdin/stdout/stderr */ fd = open("/dev/null", O_RDONLY); if(fd < 0 || dup2(fd, STDIN_FILENO) < 0) die("Failed to setup stdin"); close(fd); fd = open("/dev/null", O_WRONLY); if(fd < 0 || dup2(fd, STDOUT_FILENO) < 0 || dup2(fd, STDERR_FILENO) < 0) die("Failed to setup std{out,err}"); close(fd); /* daemonize */ pid = fork(); if(pid < 0) die("Failed to fork"); if(pid > 0) exit(0); setsid(); pid = fork(); if(pid < 0) die("Failed to fork"); if(pid > 0) exit(0); /* run */ fqd_config_init(nodeid, config_path, queue_path); listener_thread(NULL); } return 0; }
int main(int argc, char* argv[]) { std::vector<std::string> commands; commands.push_back("python run.py"); commands.push_back("python run.py"); thread_flag terminate(false); thread_flag finished(false); std::thread runner_thread(runner, &terminate, &finished, commands); std::thread listener_thread(listener, &terminate, &finished); runner_thread.join(); listener_thread.join(); return 0; }
int main(int argc, char** argv) { ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Publisher chatter_pub = n.advertise<std_msgs::Float64>("chatter", 100); ros::Rate loop_rate(5); int count = 0; boost::thread listener_thread(listener); std_msgs::Float64Ptr timestamp(new std_msgs::Float64); while (ros::ok()) { timestamp->data = ros::WallTime::now().toSec(); chatter_pub.publish(timestamp); // <---- note we pass a shared pointer here, not an object itself! ros::spinOnce(); loop_rate.sleep(); ++count; } listener_thread.join(); }
int main() { if (!canopen::openConnection("/dev/pcan32")) { std::cout << "Cannot open CAN device" << std::endl; return -1; } std::thread listener_thread(listener_func); canopen::initDevice(12); std::this_thread::sleep_for(std::chrono::milliseconds(50)); canopen::homing(12); std::this_thread::sleep_for(std::chrono::milliseconds(50)); canopen::statusWord(12); canopen::modesOfOperationDisplay(12); std::this_thread::sleep_for(std::chrono::seconds(5)); canopen::ipMode(12); canopen::sendSync(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); /* int pos = 0; for (int i=0; i<1000; i++) { canopen::sendPos("schunk_default_rPDO_12", pos); pos += 100; std::this_thread::sleep_for(std::chrono::milliseconds(10)); canopen::sendSync(); } */ std::this_thread::sleep_for(std::chrono::seconds(5)); // listener_thread.join(); canopen::closeConnection(); return 0; }
void initListenerThread(std::function<void ()> const& listener) { std::thread listener_thread(listener); listener_thread.detach(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); }