首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB6里面使用多线程提高穷举速度(VB6代码)

2012-02-24 
【分享】VB6里面使用多线程提高穷举速度(VB6代码)VB6里面使用多线程提高穷举速度刚刚几个我论坛里的小同学在

【分享】VB6里面使用多线程提高穷举速度(VB6代码)
VB6里面使用多线程提高穷举速度

  刚刚几个我论坛里的小同学在群里讨论已知位数密码穷举提速的方案,我也参与了一下.

我想了想,最简单的提速,就是真正的并行执行,即物理多线程,这需要至少两个CPU的硬件支持.

而我正好是双核CPU,于是就做了这个简单的例子(代码在后面下载).

  代码没有多少,但却花了点时间调试.

  对于多线程的调试技术,我还非常生疏,而且经常遇到IDE与编译后结果不一致的情况,很是烦人.

  不过呢,终于是整好了.

  程序要解决的一个假设题是从1开始,一个一个地跑到40000000(4千万),如何提高速度.

  我的做法是,简单地将目标拆分为两部分,分别扔给两个线程去执行,这样速度当然就是一倍啦!

  实际测试结果也确实是这样,双线程约8秒,单线程约16秒.而将代码放到虚拟机里测试的结果,却是双

线程慢于单线程(18.X秒与17.X秒,虚拟机中是单核).看来,在只能执行一个物理线程的硬件系统中,这种

穷举使用多线程,在CPU进行逻辑线程调度时消耗的时间那还真的不少.

  由于手里没有支持超线程的CPU,所以没办法测试超线程功能是啥情况.不过从超线程原理来看,貌似

只是把线程的调度从软件上改成了硬件上,本质上还是只能同时执行一个物理线程,估计也差不多....有

支持超线程CPU的朋友帮忙测试一下吧:)

  扯点题外话,其实物理并行处理,我觉得并不是CPU的强项....去年在软件开发大会上看到了NVIDIA的

CUDA技术演示,那才叫牛B,由于GPU本身物理结构上的优势,它可以轻松拥有上百个物理线程并行处理的能

力....可惜NVIDIA送的那套光碟放在陈辉家里忘带走了,还有CSDN的那个包包...呃,对,那个包包已经是

莫依的了...

  不过呢......我的本本是INTEL的GMA3100.....与CUDA是无缘的了- -!

  扯远了.....还是把代码先发上来吧,不然还没等到各位看完,我脑袋上估计都堆了很多块砖了= =|||

  源代码在此下载:

  点击下载此文件

  BY 嗷嗷叫的老马

  紫水晶工作室
  http://www.m5home.com/
  2009-07-04

[解决办法]
先顶下小马.....
[解决办法]
学习并接分
[解决办法]
我也来顶一下小马哥....
[解决办法]
试试,貌似我的电脑比搂主的高点,双线程约7秒,单线程越为14秒
[解决办法]
给老马捧场!
[解决办法]
Mark
[解决办法]
给小马捧场
[解决办法]
这个多线程的,我一定要弄明白,我实验室正好有一台双至强的超线程机器,上班了测试一下

突然觉得我以后要学习多线程编程了,因为我的计算量实在太大了。
[解决办法]
捧场 & 学习~~
[解决办法]
1 多核编程需要有多核并行算法
2 需要亲自动手进行调试
[解决办法]
伪多线程吧......
VB的多线程!!!哎...失望....

[解决办法]

探讨
给老马捧场!

[解决办法]
老马,当版主了还郁闷啥呢~~~~~~~~

[解决办法]
给老马捧场!
[解决办法]
收藏了.
[解决办法]
好东西。
[解决办法]
刚才测试了十次,平均双6.5秒单13.8秒!
我打开任务管理器的时候看了一下(选择显示“线程数”的列)
双线程执行完毕后,线程并没有关闭!
[解决办法]
老马当版主了,散分吧
[解决办法]
别用来做病毒软件啊
[解决办法]
henhao ......
[解决办法]


回帖拿分走人。
[解决办法]
顶。。。。
[解决办法]
老马对多线程很有研究啊,的多向你学习啊。
[解决办法]
线程分别绑定到了两个不同核心了吗? 
如果没绑定... 效率虽然提高了, 但不一定完全是双核心的计算结果
[解决办法]
来给马儿捧场!
[解决办法]
hao
[解决办法]

探讨
如何绑定?

头一次听说呢.

[解决办法]
学习 学习 我才接触VB不久
[解决办法]
探讨
引用:
如何绑定?

头一次听说呢.

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

[解决办法]
老马真能整BT的东西
[解决办法]
双核有前途!
[解决办法]
计算机:Intel(R) Core(TM)2 Duo CPU E6550 @ 2.33GHz 2.33 GHz
双线程:4266 ms
单线程:8344 ms

[解决办法]
5.5,12.1
有机会用在实例上试试
毕竟实践是检验真理的唯一标准
[解决办法]
计算机:Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
双线程:4016
单线程:8234
老马什么时候当版主了?恭喜恭喜
[解决办法]
5.1
10.4

台式机测试
[解决办法]
Mark

[解决办法]
老马别吝啬了,赚钱多了该把老爷机换了!
否则影响生产!

还有,之前不是曾听说过你是 API 的版主吗?
[解决办法]
飘过
[解决办法]
影响生产!
[解决办法]
好东西收藏了
[解决办法]
学习,帮顶
[解决办法]
http://publish.it168.com/cWord/962.shtml

超线程小于双核的效率是必然的。
[解决办法]
学习...
[解决办法]
原来楼主是老马呀....焕然大悟.......哈哈...
[解决办法]
vb2008内部多线程函数测试结果
6672
11360

老马多进程测试结果
5734
11796

老马牛X
[解决办法]
支持老马··
[解决办法]
捧下同姓的场
[解决办法]
果然有效,很有帮助啊。
------解决方案--------------------


我可能是泼冷水,lz别介意哦。

你的想法是好的,但是我觉得VB6下的多线程不太有意义。原因如下:

1 Visual Basic 6 的运行时库不是线程安全的。VB6的运算符、库函数都无法保证重入的时候不会出现问题,所以在VB6里面实现的多线程是不可靠的。
2 Visual Basic 6 的运行效率非常低下。我写过一个算圆周率的程序,简单用VB.NET升级向导编译了下,速度比VB6快了6倍多。所以在性能优先的场合,使用更快速并且支持MT的VB.NET才是最佳选择。

最后我在我的双PIII 550上测试了下lz的程序。双线程平均CPU占用在75%左右,我觉得可能是同步的开销太大了,损失了不少效率。
[解决办法]
马哥帮我不少忙,要顶
[解决办法]
好东西,收藏学习。
在我的机器上测试的结果:
机器配置:
'------------------------------
项目数据
操作系统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

[解决办法]
赞成,最近遇到个问题就可以用老马的东西解决
调用个别的东西(只有接口),返回时间很长
一运行那接口,程序就“死”在那里
用老马的方法可以放到后台运行
[解决办法]
另外,单元线程来替代多线程可能是稳定的
就是感觉有点繁琐
貌似没有办法的事情

就像一个领导,可以指挥别人做什么做什么很方便,
一旦要他亲自去车间干活,估计慢不说,还会把活做烂
凡是不得强求
只能没有办法的时候偶尔用用
[解决办法]
超线程?多线程?单线程?单核\双核\多核?哇,好晕,学习学习~~~
[解决办法]
还是老马带领我进入了多线程的世界
[解决办法]
看看
[解决办法]
偶也来学习学习
[解决办法]
这么多楼,居然才看到
[解决办法]

VB code
MSGBOX "顶"
[解决办法]
冒泡拿分,潜水闪人。
[解决办法]
老马,偶支持你!
[解决办法]
我的超线程的机器因为是双系统的,平常基本上是Linux系统,通常是开机计算,一般计算时间比较长,因此没有来得及测试,不过看到已经有人帮你测试了。
[解决办法]
探讨
我可能是泼冷水,lz别介意哦。

你的想法是好的,但是我觉得VB6下的多线程不太有意义。原因如下:

1 Visual Basic 6 的运行时库不是线程安全的。VB6的运算符、库函数都无法保证重入的时候不会出现问题,所以在VB6里面实现的多线程是不可靠的。
2 Visual Basic 6 的运行效率非常低下。我写过一个算圆周率的程序,简单用VB.NET升级向导编译了下,速度比VB6快了6倍多。所以在性能优先的场合,使用更快速并且支持MT的VB.NET才是最佳选择。

最后我在我的双PIII 550上测试了下lz的程序。双线程平均CPU占用在75%左右,我觉得可能是同步的开销太大了,损失了不少效率。

[解决办法]
顶贴接分.
[解决办法]
现在正在学习多线程的问题,希望有帮助……
[解决办法]
单线程:10229
多线程:5020
不过,单线程时CPU占用接近50%,多线程时CPU占用接近100%了……

[解决办法]
我写过多线程的一个小软件,但是程序总崩溃,因为vb的有些空间是不支持多线程。这个问题不知道怎么解决。
[解决办法]
双线程平均,5.5秒 ,cpu占有率89%左右
单线程平均 10.7秒,cpu占有率52%左右
[解决办法]
并非多线程,而是多进程 - -
------解决方案--------------------


进来学习
[解决办法]

探讨
另外,单元线程来替代多线程可能是稳定的
就是感觉有点繁琐
貌似没有办法的事情

就像一个领导,可以指挥别人做什么做什么很方便,
一旦要他亲自去车间干活,估计慢不说,还会把活做烂
凡是不得强求
只能没有办法的时候偶尔用用

[解决办法]
VB6的多线程是个硬伤,连内置函数都好像用不了,用了MSGBOX都会崩溃- =~所以我去用VB.NET了。。。。不过ActiveX EXE也可以,只是好像都有点不正统
学习。。。
[解决办法]
双线程约6秒,单线程越为12秒 笔记本..
[解决办法]
不知道,学习下

热点排行