不久前,我在这里发布了一篇关于mfc socket中的CSocket在超线程cpu编程时出现问题的帖子本人一直被此问题所困扰,经过多方测试研究,现在得出几点测试结果,希望大家一起探讨。首先,超线程cpu是一种很好的cpu,并没有影响到mfc socket的工作,那么我所说的超线程编程的问题完全是由于vs.net 2003而引起的!!后来我在vs6下重新编译了我的程序,发现根本没有问题,我想这是vs.net 2003的bug。但是,我没有在网上看到相关的报道。看来vs6还是很经典的版本啊!其次,vs.net2003下表现的问题在某些cpu下(例如p42.4非超线程和p42.8超线程)显得比较严重,不知道这是什么样的问题,但有时候在某些cpu下,程序显得极其正常。我曾在雷鸟1g的机器上测试过,很正常。再次,我还是描述一下我程序的错误情况,就是socket连接完全正常,发送数据在刚开始的时候也完全正常,但是当发送了n(n是不确定的数)个包之后,数据包就再也接受不到了,socket处于完全没有响应的状态。另外,为了全面测试,我将网络通讯程序重写,用win api的非阻塞模式(WSAAsyncSelect)来实现,不管是在vs.net2003还是在vs6下,都非常正常,由此确定,vs核心的socket实现还是没有问题的,问题就出在了mfc CSocket的封装上。但是我不知道问题到底出在哪,我的编程模型是采用CSocket CArchive CSocketFile来实现数据串行化的。如果哪位高人曾经解决过这个问题欢迎探讨!最后,我的编程有一段时间的经验了,但是可以说还是新手,以上问题纯粹是本人自己研究,可能有很多说的不对的地方,希望高手们能不吝赐教,指出我的问题所在,在此十分感谢!

解决方案 »

  1.   

    呵呵,初学的时候就是用的CSocket+多线程,被奇怪的错误搞得一头雾水以后就再也没用过了不过非常庆幸自己当初的选择,还是纯socket api好用:)
      

  2.   

    跟VC6.0或者VS.Net无关,因为我在VC6下也出过你的问题,在超线程CPU下,CSocket真的有问题,数据莫名其妙就丢了,出错误:10054,然后就崩掉了,后来全改为API到现在都没出过问题。