本帖最后由 zhuyf87 于 2013-01-27 09:18:11 编辑

解决方案 »

  1.   

    饿。难道作者的意思是,最上面的代码是放到主线程里的,recv会阻塞主线程。整个程序就“凝固”了?
    而后面单独建立两个线程,是放置阻塞主线程的?
      

  2.   


    那分为两个线程,ReadThread和ProcessThread的好处是什么呢?
    为了防止阻塞主线程,我也可以只创建一个线程,比如叫做ReadAndProcessThread。
    在ReadAndProcessThread线程函数里先recv再处理。
      

  3.   

    你想只创建一个线程,也是可以的。
    分为两个线程来处理,我个人理解的好处是,
    这样方便以后扩展,可以在计算线程里做些别的事情。
    比如说如果不想读线程recv无限阻塞等待下去,
    就可以在计算线程的WaitForSingleObject中设置超时时间。
      

  4.   

    猜不到作者的想法,估计是
    这是将IO收发(通讯)和数据处理(业务)分离
    这里为了可以一边recv数据,一边处理,有时处理数据比较耗时,单线程会影响recv
    不一定是为了防止阻塞主线程这重模型是大规模、高性能服务器普遍的设计方案
      

  5.   


    看代码的写法应该不会是为了“可以一边recv数据,一边处理,有时处理数据比较耗时,单线程会影响recv”
    因为ReadThread和ProcessThread共同处理一个缓冲区,并使用了CRITICAL_SECTION进行同步。
    在ProcessThread工作的时候,ReadThread是无法recv数据的。
      

  6.   

    不用 SetEvent  把ProcessThread 函数替换到SetEvent位置
    去掉  EnterCriticalSection相关内容 
    会有什么问题?