int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { try { CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); if (parse_args (argc, argv) != 0) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("ERROR: wrong arguments\n")), -1); if (id_offset + client_threads >= ACE_OS::strlen (Test::ClientIDs)) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("ERROR: too many clients\n")), -1); CORBA::Object_var obj = orb->string_to_object (ior); // Create Hello reference. Test::Hello_var hello = Test::Hello::_narrow (obj.in ()); if (CORBA::is_nil (hello.in ())) ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("ERROR: nil Hello object\n")), -1); if (do_shutdown) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nClient sending server shutdown message....\n"))); ACE_OS::sleep (7); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Shutting down NOW\n"))); hello->shutdown (); } else { Test::UIPMC_Object_var uipmc_obj = hello->get_object (); { // start clients ClientThread cln_thr (uipmc_obj.in (), payload_length, id_offset, payload_calls, sleep_millis); cln_thr.activate (THR_NEW_LWP | THR_JOINABLE, client_threads); cln_thr.wait (); } // Give a chance to flush all OS buffers for client. while (orb->work_pending ()) orb->perform_work (); } orb->destroy (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Exception caught in client main ():"); return 1; } ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nClient finished successfully.\n"))); return 0; }