ex1.cpp

来自「ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识」· C++ 代码 · 共 184 行

CPP
184
字号
// $Id: ex1.cpp 54959 2003-12-30 23:18:59Z shuston $// ============================================================================//// = LIBRARY//   examples//// = FILENAME//   ex1.cpp//// = DESCRIPTION//    Example for using <ACE_UPIPE_SAP> and <ACE_Thread> for//    intra-process communication.//// = AUTHOR//    Gerhard Lenzer and Douglas C. Schmidt//// ============================================================================#include "ace/OS_main.h"#include "ace/OS_NS_string.h"#include "ace/Stream.h"#include "ace/UPIPE_Acceptor.h"#include "ace/UPIPE_Connector.h"ACE_RCSID(UPIPE_SAP, ex1, "$Id: ex1.cpp 54959 2003-12-30 23:18:59Z shuston $")#if defined (ACE_HAS_THREADS)// Global patternstatic ACE_UPIPE_Addr addr (ACE_TEXT("pattern"));// peer1 thread entry point.static void *peer1 (void *){  ACE_UPIPE_Stream c_stream;  ACE_DEBUG ((LM_DEBUG,              "(%t) peer1 starting connect\n"));  ACE_UPIPE_Connector con;  if (con.connect (c_stream, addr) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) peer1 ACE_UPIPE_Connector failed\n"));  ACE_Message_Block *mb;  ACE_NEW_RETURN (mb,                  ACE_Message_Block (20),                  0);  mb->copy ("hello", 6);  if (c_stream.send (mb) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) error peer1 send\n"));  if (c_stream.recv (mb) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) error peer1 recv\n"));  ACE_ERROR ((LM_ERROR,              "(%t) peer1 ack is \"%s\"\n",              mb->rd_ptr ()));  // Free up the memory block.  mb->release ();  // Now try the send()/recv() interface.  char mytext[] = "This string is sent by peer1 as buffer";  ACE_ERROR ((LM_ERROR,              "(%t) peer1 sending text\n"));  if (c_stream.send (mytext, sizeof mytext) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) buffer send from peer1 failed\n"));  char conbuf[30];  // Buffer to receive response.  int i = 0;  for (char c = ' '; c != '!'; i++)    {      if (c_stream.recv (&c, 1) == -1)        ACE_ERROR ((LM_ERROR,                    "(%t) buffer recv from peer1 failed\n"));      else        conbuf[i] = c;    }  conbuf[i] = '\0';  ACE_DEBUG ((LM_DEBUG,              "(%t) peer1 received buffer with \"%s\"\n",              conbuf));  c_stream.close ();  return 0;}static void *peer2 (void *){  ACE_UPIPE_Acceptor acc (addr);  ACE_UPIPE_Stream s_stream;  // Spawn a peer1 thread.  if (ACE_Thread_Manager::instance ()->spawn (ACE_THR_FUNC (peer1),                                              (void *) 0,                                              THR_NEW_LWP | THR_DETACHED) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       "%p\n",                       "spawn"),                      0);  ACE_DEBUG ((LM_DEBUG,              "(%t) peer2 starting accept\n"));  if (acc.accept (s_stream) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) ACE_UPIPE_Acceptor.accept failed\n"));  ACE_Message_Block *mb = 0;  if (s_stream.recv (mb) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) peer2 recv failed\n"));  ACE_DEBUG ((LM_DEBUG, "(%t) peer2 recv is \"%s\"\n",              mb->rd_ptr ()));  mb->wr_ptr (mb->rd_ptr ());  mb->copy ("thanks", 7);  if (s_stream.send (mb) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) peer2 send failed\n"));  char s_buf[42];  ACE_DEBUG ((LM_DEBUG,              "(%t) peer2 sleeping on recv\n"));  if (s_stream.recv (s_buf, sizeof s_buf) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) peer2 recv failed\n"));  else    ACE_DEBUG ((LM_DEBUG,                "(%t) peer2 received buffer with \"%s\"\n",                s_buf));  ACE_OS::strcpy (s_buf,                  "this is the peer2 response!");  if (s_stream.send (s_buf, 30) == -1)    ACE_ERROR ((LM_ERROR,                "(%t) peer2 send failed\n"));  s_stream.close ();  return 0;}intACE_TMAIN (int, ACE_TCHAR *[]){  // Spawn a peer2 thread.  if (ACE_Thread_Manager::instance ()->spawn (ACE_THR_FUNC (peer2),                                              (void *) 0,                                              THR_NEW_LWP | THR_DETACHED) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       "%p\n",                       "spawn"),                      1);  // Wait for peer2 and peer1 threads to exit.  ACE_Thread_Manager::instance ()->wait ();  return 0;}#elseintACE_TMAIN (int, ACE_TCHAR *[]){  ACE_ERROR_RETURN ((LM_ERROR,                     "threads not supported on this platform\n"),                    -1);}#endif /* ACE_HAS_THREADS */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?