现有程序可以处理多用户同时访问的情况,怎样编写并发的测试程序,请大侠指导,最好有源码,谢谢

解决方案 »

  1.   

    我们用的办法是用createthread()创建多个线程来模拟多个连接
      

  2.   

    To: jadetiger(白玉老虎) ,你好,在程序中,我也用的多线程AfxBeginThread(),现在,我想知道怎样传数据,才能检测我的程序对并发请求的处理能力
      

  3.   

    启动大量测试线程,在每个线程中再用循环不断提交你的测试数据。这个测试模块可以和你的应用程序写在一起,这样传数据和调函数都比较方便,正式发布的时候把这一块去掉就行了。如果是Socket应用,另外写一个程序测试也比较容易的。
      

  4.   

    我用的Socket,在测试程序中的Button响应函数中,用while,在线程函数中用while(i--<100){
       send();
    }
    但是处理速度非常慢,应用程序每接收一个请求就开一个线程,但跟踪时,却出现了,不应循环的地方反复执行,不知道是何原因,如果测试程序合理的话,看来我就要从其他方面找原因了
      

  5.   

    你调试方法错了,多线程调试时需要挂起其他模块以防干扰。如果没有刮起其他线程,有可能单步执行时,第一步是thread1,第二步是thread2,第三步又回到thread1......这样看起来就好像一条语句在反复执行或者乱跳。
    打开菜单VC->debug->Threads...你可以挂起不相关的线程
      

  6.   

    如果是多线程的程序应用,而且你用并发请求来测试这个程序,那么在应用程序中调试跟踪的时候,很可能会出现断点被反复执行的情况,因为是多线程的嘛,时间上没有先后性,应该是不同的线程不定时的执行到这里。
    你可以先测试只有一个请求的情况,通过了,再测试同时发生的情况。
    在应用程序中,为了测试多线程是否起作用,可以在线程函数中(我喜欢在结尾处)加一个Sleep(n)做测试。限制线程最大数量为1个,用定量的m个请求来测试时延,应该差不多为n*m;然后加大线程最大数量为10个或者其他,用定量的m个请求来测试,时延如果差不多为n*m/10,那就对了。
    这个测试可以证明线程机制是否正确。
      

  7.   

    应用程序每接收一个请求就开一个线程??是你的被测试程序吗?好像不太合理,一个连接一个线程还能接受,一个请求一个线程,太可怕了,即使并发用户不是很多,单创建线程的开销就够系统受了,万一在线程注销时有那么一点点的内存泄漏......
    测试时要测试一下并发能力,测试进程最多200个线程,不行就多开进程或买机器,只有一个进程的测试意义不大,因为在你的程序死掉之前,测试程序已经趴下了,你的测试程序不会比正式开发的软件效率还高吧。
    测试时还要注意对非法连接的防护力,最起码能有效对付connect之后什么都不干的线程
      

  8.   

    多线程调试时可使用TRACE宏,比较方便
      

  9.   

    To:alanwang_(alan),调试用TRACE宏,可否详细一些,谢谢
      

  10.   

    TRACE和printf一样,就是输出一些调试信息,仅在debug版本有效。你可以在程序中随便加一条TRACE语句看看效果,使用很简单,语法和printf一样。
    已经到了测试并发承受能力,可能已经不能用debug版本了。