怎样设计一个类似于LISTEN的线程,thanks

rdqjuven 2004-09-15 11:02:33
我想建立一个线程一直接收网络另一台机器发送过来的数据,如果用while(1)太耗资源,我想请问一下,怎样设计一个类似于LISTEN的线程,使它可以一直在工作,又不会太消耗系统资源。谢谢
...全文
158 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ldsjlzy 2004-09-17
  • 打赏
  • 举报
回复
if(!CreateSocket(&s,PEER_STREAM))
{
return -1;
}
if(!BindSocket(s,gszHostAddr,gbListenPort))
{
CloseSocket(s);
return -1;
}
if(!ListenSocket(s))
{
CloseSocket(s);
return -1;
}
/////////////////////////////////////////////////////

//创建作为socket消息网络事件
WSAEVENT hNetEvent = WSACreateEvent();
if(hNetEvent == WSA_INVALID_EVENT)
{
CloseSocket(s);
return -1;
}

//事件数组
hEvnets[0] = hExitEvent; //程序退出事件
hEvnets[1] = hNetEvent; //socket消息事件

//接受监听socket的ACCEPT消息
int result = WSAEventSelect(s,hNetEvent,FD_ACCEPT);
if(result == SOCKET_ERROR)
{
CloseSocket(s);
WSACloseEvent(hNetEvent);
return -1;
}

//循环接收客户请求(线程主循环)
WSANETWORKEVENTS NetworkEvents; //用于解析的事件的结构
for(;;)
{
//等候socket网络消息(阻塞)
DWORD EventCaused = WSAWaitForMultipleEvents(
2,
hEvnets,
FALSE,
WSA_INFINITE,
FALSE);

if(EventCaused == WSA_WAIT_FAILED || EventCaused == WAIT_OBJECT_0)
{
CloseEvent(hNetEvent);
CloseSocket(s);
return -1;
}

//解析出网络事件
result = WSAEnumNetworkEvents(
s,
hNetEvent,
&NetworkEvents);

if(result == SOCKET_ERROR)
{
WSACloseEvent(hNetEvent);
CloseSocket(s);
return -1;
}

//判断事件类型
if(NetworkEvents.lNetworkEvents == FD_ACCEPT)
{
//处理..........
}
oyljerry 2004-09-17
  • 打赏
  • 举报
回复
用listen,然后在accept中用select等模型来接收数据
tjandy 2004-09-17
  • 打赏
  • 举报
回复
mark
Mega1212 2004-09-16
  • 打赏
  • 举报
回复
1 WSAStartup
2 socket
3 bind
4 listen

5 accept

listen之后一直处于监听端口的状态。不用写什么while(1)之类的死循环。 把Accept做成一个单独的线程,让这个线程不停accept连接。

刚刚做了一个这样的小程序,不知道和楼主的意思是否相同。
DentistryDoctor 2004-09-16
  • 打赏
  • 举报
回复
建议楼主阅读<Windows网络编程>
rdqjuven 2004-09-16
  • 打赏
  • 举报
回复
jinmo 2004-09-16
  • 打赏
  • 举报
回复
刚学,不会
DentistryDoctor 2004-09-15
  • 打赏
  • 举报
回复
使用WSAEventSelect,建立一个线程,在其中WSAWaitForMultiEvents,然后WSAEnumNetworkEvents,FD_READ时才读?
Kudeet 2004-09-15
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;en-us;192570
Soundboy 2004-09-15
  • 打赏
  • 举报
回复
Win32多线程程序设计
这本书上有比较详细的说明。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧