首页 新闻 搜索 专区 学院

多线程服务端问题(IO 完成端口)

0
悬赏园豆:10 [待解决问题]

先简单说明,程序是win32 控制台程序

1 创建IO完成端口

2 创建处理线程

3 将处理线程与IO完成端口关联

4 主线程用来处理socket,基本流程伪代码如下:

    listen

    while(true)

    {

         .....

         Socket acceptSocket=  accept(...);

        WSARecv( acceptSocket); //或者ReadFile(acceptSocket)

        // 使用这两个函数接收数据是,在创建处理线程中调用GetQueuedCompletionStatus

        // 该函数使得线程睡眠。当socket有函数接收时激活线程。

       .....

     }

    问题出在while循环处了,如果主线程运行一个死循环,那么就没机会输入字符串。

    如果将死回换,改为while(getch()!='y'),虽然可以通过输入y来退出程序,但每次循环都需要输入一个字符才能够执行下去,但是这样不符合服务器程序的特点。服务端应该,程序运行起来,就不再需要人来控制了。只要在某些时刻能做一些操作就行了,比如过一段时间了输入y,程序就能退出了。

   现在就死既保留while(TRUE)有能够在某一时刻输入字符。

   试了一种办法,开启另一个线程专门负责IO,貌似搞不定。

罗纳尔东的主页 罗纳尔东 | 初学一级 | 园豆:192
提问于:2015-02-04 17:58
< >
分享
所有回答(2)
0

我建议你看下 SDK 下的 IOCP 的示例程序,目录是 netds/winsock/iocp。

Launcher | 园豆:45045 (高人七级) | 2015-02-04 18:13
0

需要一个event来暂停线程,主要accept后,由处理线程来发送信号然后主线程继续

xujiatao | 园豆:360 (菜鸟二级) | 2015-02-04 19:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册