热情软件屋

 

是否可以产生两个线程用于接受和发送一个全程变量


编号:QA003477
建立日期: 2000年10月31日 最后修改日期:2000年11月1日
所属类别:

four:
    操作系统:win98
    编程工具:vc++6.0
    问题:请问专家,在socket的操作上,我是否可以在主进程中建立套接口,获得连接后,产生两个线程一个用于接受(recv),一个用于发送(send),接受或发送的信息由一个全程变量传递,这样是否可以?
    水平: 刚入门

回答:

    当然可以,只不过要注意同步问题。另外似乎也没有必要这么做,获得连接后,立即启动另一个进程就可以了。
    UINT ServerThreadProc(LPVOID pParam)
    {
    ..................
    ...........
    char* buffer = new char[SERVERMAXBUF];
     if(!g_sListen.Accept(sConnect, saClient)) {
     // view or application closed the listing socket
     delete [] buffer;
     return 0;
     }
     AfxBeginThread(ServerThreadProc, pParam, READ_PRIORITY_NORMAL);
     // read request from client
     接受信息、发送信息部分
     ........
     .........
    }
    knf的意见:
    当然可以,不过要注意线程同步问题。创建线程后可以使用全局变量或参数方式把Socket套接字(或指针)传递给线程。在发送和接收时对共享内存的操作要进行同步。
    xg_liao的意见:
    完全可以,这就是编制 Proxy程序的方法,具体的应用事例可以在http://www.codeguru.com中找到。
    tyt的意见:
    可以的。Win32 API的recv,send调用不能同时进行,需要使用者自己协调好调用。刚使用Socket编程时,我以为MFC的CSocket和CAsyncSocket的异步方式较好,此类对象实例建立初始化后,可响应WM_SOCKET_NOTIFY消息从而调用OnReceive() OnSend()等成员函数,可以在它们中调用自己的recv,send,在recv,send后给线程处理数据。不好意思,看到线程我就想说"开" ^-^

此问题由舒克回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio