int main(int argc, char ** argv) { rclcpp::init(argc, argv); auto node = rclcpp::Node::make_shared("add_two_ints_client"); auto client = node->create_client<example_interfaces::srv::AddTwoInts>("add_two_ints"); while (!client->wait_for_service(1_s)) { if (!rclcpp::ok()) { printf("add_two_ints_client was interrupted while waiting for the service. Exiting.\n"); return 0; } printf("service not available, waiting again...\n"); } auto request = std::make_shared<example_interfaces::srv::AddTwoInts::Request>(); request->a = 2; request->b = 3; auto future_result = client->async_send_request(request); // Wait for the result. if (rclcpp::spin_until_future_complete(node, future_result) == rclcpp::executor::FutureReturnCode::SUCCESS) { printf("Result of add_two_ints: %zd\n", future_result.get()->sum); } else { printf("add_two_ints_client_async was interrupted. Exiting.\n"); } rclcpp::shutdown(); return 0; }
void* browser_thread(void* limit) { type=BROWSER; for(int i=0;i<*(int*)limit;i++) { wait_for_service(); randomize(); } return 0; }
int start_child() { pid_t mypid = getpid(); setpgid(mypid, mypid); pid_t child; child = fork(); switch (child) { case 0: close(pipe_fd[1]); dup2(pipe_fd[0],0); if (proc_stat.argc > 0) { return execvp(proc_stat.path, proc_stat.argv); } else { char *b = NULL; b = malloc((sizeof("exec ") - 1) + strlen(proc_stat.path) + 1); strcpy(b, "exec "); strcat(b, proc_stat.path); return execl("/bin/sh", "sh", "-c", b, (char *) NULL); } case -1: fprintf(stderr, "launch: fork failed: %s\n", strerror(errno)); return -1; default: close(pipe_fd[0]); proc_stat.pid = child; int a=1; mylog("start child pid=%d",child); if(wait_for_service()){ proc_stat.running = RUNNING; wait_for_stop(); clean_child(); }else{ clean_child(); } } }
int do_exec(int nargs, char **args) { return wait_for_service(args[1]); }