是否可以产生两个线程用于接受和发送一个全程变量
编号: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后给线程处理数据。不好意思,看到线程我就想说"开" ^-^
此问题由舒克回答。
| |
|
|
| |
|
|