void PIAEngine::run(int argc, char *argv[]) { std::thread sendThread(&SendSocket::run, &sendTemp); sendThread.detach(); std::thread receivingThread(&ReceivingSocket::run, &receiveTemp); receivingThread.detach(); std::thread announceThread(&Announcement::run, &announcement); announceThread.detach(); GUIController guiControl(argc, argv, &queueController, &routingTable, settings, &chatHistory); std::thread GUI(&GUIController::startGui, guiControl); std::thread queueControllerThread(&QueueController::run, &queueController); queueControllerThread.detach(); // Wait for the GUI to be joinable if (GUI.joinable()) { GUI.join(); } std::cout << "CLOSING" << std::endl; }
int __cdecl #else int #endif main(int argc, char **argv) #endif { int rv = 0; int c; #ifndef NO_THREADS char message[32]; pthread_t thread[2]; int iret[2]; #endif #ifdef METACOMMAND fpdbg = stdout; #endif printf("%s ver %s\n", progname,progver); while ( (c = getopt( argc, argv,"ab:ce:gi:l:mp:r:s:x?")) != EOF ) switch(c) { case 'a': fBroadcastOk = 1; fping = 1; break; /*all (broadcast ping)*/ case 'c': /*canonical, CSV*/ fcanonical = 1; bdelim = BCOMMA; break; case 'm': /* show MAC address, use raw, requires root priv */ fBroadcastOk = 1; fping = 1; fraw = 1; break; /*all (broadcast ping)*/ case 'l': g_limit = atoi(optarg); break; case 'g': fping = 0; break; /*use get chan auth cap method */ case 'b': /*begin*/ strncpy(g_startDest,optarg,MAXHOSTNAMELEN); break; case 'e': /*end*/ strncpy(g_endDest,optarg,MAXHOSTNAMELEN); break; case 'i': /*interface*/ strncpy(g_interface,optarg,sizeof(g_interface)); break; case 'p': /*port/socket*/ g_port = (ushort)atoi(optarg); break; case 'r': /*repeat N times*/ g_repeat = atoi(optarg); break; case 's': /*subnet*/ /* copy optarg from 10.243.42.0 or similar, to * begin/end range. */ break; case 'x': fdebug = 1; break; /* debug messages */ default: if (fdebug) printerr("getopt(%c) default\n",c); show_usage(); rv = ERR_USAGE; goto do_exit; } #ifdef WIN32 /* Winsock inet_aton() does not like 255.255.255.255 */ if (!fBroadcastOk && (g_startDest[0] == 0) ) { show_usage(); printerr("A beginning IP is required, using -b\n"); goto do_exit; } #else if (g_startDest[0] == 0) { strcpy(g_startDest,"255.255.255.255"); /* INADDR_BROADCAST */ fBroadcastOk = 1; } #endif if (fraw == 1) { if (frawok == 0) { printf("Warning: SOCK_RAW not yet implemented on this OS\n"); } #ifdef LINUX else { c = geteuid(); if (c > 1) printf("Must be root/superuser to use SOCK_RAW\n"); } #endif } if (g_endDest[0] == 0 || fBroadcastOk) strcpy(g_endDest,g_startDest); /*only one IP address*/ if (fdebug) printerr("intf=%s begin=%s end=%s port=%d\n", g_interface,g_startDest,g_endDest,g_port); rv = sock_init(g_interface, g_startDest, g_endDest); if (fdebug) printerr("sock_init rv = %d, sockfd = %d\n",rv,g_sockfd); if (rv != 0) { show_usage(); printerr("sock_init error %d\n",rv); goto do_exit; } printf("Discovering IPMI Devices:\n"); #ifdef NO_THREADS sendThread(NULL); #else iret[1] = pthread_create( &thread[1], NULL, receiveThread, (void*) message); iret[0] = pthread_create( &thread[0], NULL, sendThread, (void*) message); pthread_join( thread[0], NULL); pthread_join( thread[1], NULL); #endif // if (fdebug) printf("\n%s: %d pings sent, %d responses\n",progname,g_npings,g_npongs); do_exit: cleanup(); return(rv); } /* end main()*/