在工作线程中将读取的内容放到一个已经定义的缓存区中

解决方案 »

  1.   

    有没有具体的代码例子呢
    我只用过csocket
    而csocket好像不能在工作线程中跑
      

  2.   

    不记得那有这个例子,只要你看过线程和SOCKET,用个CList就能当缓冲了,就可以自己写了
      

  3.   

    看看file zilla的源代码吧,跟MFC的CSock接口兼容
    别的方案也有,重叠IO和完成端口就是,初学的时候别搞那么困难
      

  4.   

    csocket好像不能在工作线程中跑
    ----------------------------
    不会吧,不论用Socket类创建的,还是API,都是可以在线程里面运行的。
      

  5.   

    其实好的设计思想,我认为是这样的。主线程只负责消息转发(接收,发送消息转发给辅助线程)辅助线程只负责发送,接收数据。数据处理线程只负责处理数据处理存放。解决好以上3个问题,功能和完成端口差不多,可以告诉处理很多socket并发发送,并发接收数据。
      

  6.   

    csocket在线程中使用,就算可以也是非常麻烦和勉强的,那位如果做过不防贴点代码大家学习一下?建议在主线程中读取数据,其实读数据占用资源是很小的,CSocket已经把数据整理好了,只是内存拷贝,占资源的地方应该是解析数据与处理数据,所以把它们放在线程中就行了。注意,读出数据后要迅速开启线程(解析数据、处理数据),并迅速退出数据接收函数(这个函数越简单越好),以免影响到下一次数据的接收。如果解析数据与处理数据都不占资源,那么开线程纯属于没事找抽型,开线程的代价不低。
      

  7.   

    csocket在线程中使用,就算可以也是非常麻烦和勉强的,那位如果做过不防贴点代码大家学习一下?建议在主线程中读取数据,其实读数据占用资源是很小的,CSocket已经把数据整理好了,只是内存拷贝,占资源的地方应该是解析数据与处理数据,所以把它们放在线程中就行了。注意,读出数据后要迅速开启线程(解析数据、处理数据),并迅速退出数据接收函数(这个函数越简单越好),以免影响到下一次数据的接收。如果解析数据与处理数据都不占资源,那么开线程纯属于没事找抽型,开线程的代价不低。------------------------------------------------------------------>
    读出数据迅速开线程是不好的,而应该早就把线程开好了,随时等待读数据比较好(而且这个等待应该是阻塞的 不占cpu),甚至可以开很多线程负荷分担接收数据。
      

  8.   

    http://down.newasp.net/Code/vc/nccf/
    这个很全的
      

  9.   

    注意啊,在DLL里用CSocket 可能有问题
      

  10.   

    在线程中接收Socket消息.然后处理即可
    DWORD WINAPI ThreadWork(LPVOID lpParameter)
    {
    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {
    if (msg.lParam==FD_ACCEPT)
    //Do accept.
    if ((msg.lParam==FD_CLOSE)||(msg.lParam==658833440))
    //Do close.
    if (msg.lParam==FD_READ)
    //Do recv.
    }
    return EXIT_SUCCESS
    }
      

  11.   

    在线程中接收Socket消息.然后处理即可
    DWORD WINAPI ThreadWork(LPVOID lpParameter)
    {
    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {
    if (msg.lParam==FD_ACCEPT)
    //Do accept.
    if ((msg.lParam==FD_CLOSE)||(msg.lParam==658833440))
    //Do close.
    if (msg.lParam==FD_READ)
    //Do recv.
    }
    return EXIT_SUCCESS
    }----------------------------------------------------
    好是好,不过,消耗资源比较大,直接用SetEvent(),效率高。