本帖最后由 myjian 于 2009-07-04 04:51:24 编辑

解决方案 »

  1.   

    SF自己坐............有超线程的XDJM们测试一下看看......
      

  2.   

    那快测试一下吧,想知道超线程与真正的物理多线程到底有多大差别:)现在就是对于多线程程序的调试经验一点都没有,整得头晕呀......多线程逻辑与单线程逻辑很多地方都有区别,还极不习惯,要好好研究一下....什么是真多线程?我确实还不知道有"伪多线程"与"真多线程"这种东西存在,麻烦扫个盲吧...
    不过,据我所知,这种线程叫单元模型线程,又不是VB6的,是COM的标准之一,VB6支持而已,又关VB6啥事了.....我晕.把那两个对象Set XX = Nothing后单元线程才会释放....你可以写在计算完成的判断里,就可以看见线程数减少了.//多谢大家捧场.不过............我靠了,好象没有一个人比我的机器慢啊,我郁闷!!!另外,那个"版主修改",应该是错别字,楼主修改才对吧.
      

  3.   

    好像用Private Declare Function SetProcessAffinityMask Lib "kernel32.dll" (ByVal hProcess As Long, ByVal dwProcessAffinityMask As Long) As Long函数吧.
      

  4.   


    把 Process 换成 Thread
      

  5.   

    计算机:Intel(R) Core(TM)2 Duo CPU E6550  @ 2.33GHz 2.33 GHz
    双线程:4266 ms
    单线程:8344 ms
      

  6.   

    收到!!我晕,真还没有一个CPU比我慢的!!郁闷哪!你们是台机还是本本?如果是台机的话我还能想得通些.......
      

  7.   

    计算机:Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz
    双线程:4016
    单线程:8234
    老马什么时候当版主了?恭喜恭喜
      

  8.   

    哪有啥版主啊,我看是CSDN的错别字我都没有任何通知.
      

  9.   

    老马别吝啬了,赚钱多了该把老爷机换了!
    否则影响生产!还有,之前不是曾听说过你是 API 的版主吗?
      

  10.   

    我只是"申请"而已,而且也是很久之前的事了,我都忘了.CSDN好象也忘了吧.不过也正好,还是先别申请了.......
      

  11.   

    狐狸用超线程CPU测试了一下,证明超线程与多核/多CPU确实还是有差距的.双线程与单线程的时间之比离1:2还差了一点.
      

  12.   

    http://publish.it168.com/cWord/962.shtml超线程小于双核的效率是必然的。
      

  13.   

    vb2008内部多线程函数测试结果
    6672
    11360老马多进程测试结果
    5734
    11796老马牛X
      

  14.   

    我可能是泼冷水,lz别介意哦。你的想法是好的,但是我觉得VB6下的多线程不太有意义。原因如下:1 Visual Basic 6 的运行时库不是线程安全的。VB6的运算符、库函数都无法保证重入的时候不会出现问题,所以在VB6里面实现的多线程是不可靠的。
    2 Visual Basic 6 的运行效率非常低下。我写过一个算圆周率的程序,简单用VB.NET升级向导编译了下,速度比VB6快了6倍多。所以在性能优先的场合,使用更快速并且支持MT的VB.NET才是最佳选择。最后我在我的双PIII 550上测试了下lz的程序。双线程平均CPU占用在75%左右,我觉得可能是同步的开销太大了,损失了不少效率。
      

  15.   

    好东西,收藏学习。
    在我的机器上测试的结果:
    机器配置:
    '------------------------------
    项目 数据
    操作系统 Microsoft Windows XP Professional
    操作系统版本升级(SP) Service Pack 3
    日期/时间 2009-07-11 / 15:53
    CPU 类型 DualCore Intel Core 2 Duo E8200, 2666 MHz (8 x 333)
    主板名称 Dell OptiPlex 755
    主板芯片组 Intel Bearlake Q35
    系统内存 2016 MB  (DDR2-667 DDR2 SDRAM)
    DMI 系统产品 OptiPlex 755
    DMI 主板制造商 Dell Inc.
    '------------------------------------

    单线程:6500ms
    双线程:3312ms
      

  16.   

    其实对于这种密集型运算来说,的确不太适合VB6来做.我对于VB6的单元线程,也仅是作为一种提高用户体验的手段来使用的.要是真的需要进行高效率密集型运算,我宁愿会选择C或汇编来完成,这个代码只是一个例子而已,用于说明一下实现的思路.
      

  17.   

    我的超线程的机器因为是双系统的,平常基本上是Linux系统,通常是开机计算,一般计算时间比较长,因此没有来得及测试,不过看到已经有人帮你测试了。
      

  18.   


    MSDN上说:
    通过对每个单元进行属性和方法调用的序列化,自动化可以防止重入,除非代码自己放弃了对处理器的控制。可导致放弃对处理器的控制的代码有: 
    1 调用 DoEvents。
    2 调用其它线程的对象的方法或属性,或另一个进程的对象的属性或方法。
    3 产生需要由另一个线程或另一个进程处理的事件。
    4 从一个方法内调用一个交叉线程或交叉进程方法。
    5 显示窗体。 如果希望两个成员函数能够安全地同时执行,除非在编写对象的代码时必须进行特殊的处理,否则在代码中不要放弃对处理器的控制权。
      

  19.   

    单线程:10229
    多线程:5020
    不过,单线程时CPU占用接近50%,多线程时CPU占用接近100%了……
      

  20.   

    直接是两个循环,循环体内没有其它代码,所以一直占用着CPU...
      

  21.   

    双线程平均,5.5秒 ,cpu占有率89%左右
    单线程平均  10.7秒,cpu占有率52%左右
      

  22.   

    简单的方法也是有的, VB不是不支持多线程,VB只是不支持创建多线程,需要用一些"非常"手段来创建,这样等于绕过了VB的进程保护,导致容易崩溃. VB中推荐的做法是用ACTIVEX EXE来实现"多线程"
      

  23.   

    这个貌似没办法,的确很多控件不是线程安全的..........
    哪里有多进程?
    不过即使如此,也有不少的损失,比如,ActiveX EXE里面无法使用MDI窗体,而且不少控件并非线程安全,不能在多线程工程里工作等..........但是这些可以利用标准EXE来协助解决,而ActiveX EXE在MSDN里貌似就是作为组件服务器来使用的,这样的话就会有两个进程;一般来说不是我这种带界面的用法.当然,除非是受到"绿色软件"严重影响或是不写商业软件的人,才会非常在意"是否一个单一文件"或"是否单一进程"之类的事....我的客户还好对这些没有特殊的要求,他们只要求实现功能,然后我只要求收到钱就OK了:)
      

  24.   

    VB6的多线程是个硬伤,连内置函数都好像用不了,用了MSGBOX都会崩溃- =~所以我去用VB.NET了。不过ActiveX EXE也可以,只是好像都有点不正统
    学习
      

  25.   

    MSDN里说,"VB6中提供多线程支持的方式是进程外部件(即ActiveX EXE)".我觉得这就是VB6里多线程的官方方案了.......
      

  26.   

    我测了一下
    双核 T5500 1.6G  HP
    xp sp3双线程:第一次 5900  第二次 6409  第三次 6334
    单线程:12438ms我试一下你说的方法,绑定到指定的核