ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: BrandSex

VBA的多线程开发

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-11-19 11:40 | 显示全部楼层
QUOTE:
以下是引用BrandSex在2007-11-19 11:33:19的发言:

right tools for the right job, 不要出一些和Excel应用无关的题目,开发游戏还是用DirectX SDK专业一点

http://club.excelhome.net/viewthread.php?tid=276250&px=0

这个绝对是与EXCEL有关了.都不用VBA了,用函数就行了.

TA的精华主题

TA的得分主题

发表于 2007-11-19 11:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用BrandSex在2007-11-19 10:56:49的发言:

你的VBA代码速度超慢吗?你刚买的双核CPU感觉总有个CPU处于空闲状态吗?你的VBA代码有很多任务在同时完成吗?OK,你需要使用多线程,不过使用多线程前要记住一点:不要为了用多线程而用多线程.

使用多线程要用到API,同步,总之很繁琐的,如何你看了下面的代码没有感觉到不想看了,请回贴我再继续,否则我写了没人看也没什么意思

Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
    ByVal dwMilliseconds As Long) As Long

有点感觉,请楼主继续,谢谢.

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-19 12:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-11-19 12:00 | 显示全部楼层
QUOTE:
以下是引用BrandSex在2007-11-19 11:05:40的发言:

我要以德服人...

雷老虎?!

TA的精华主题

TA的得分主题

发表于 2007-11-19 12:04 | 显示全部楼层

对此题目有点兴趣,期待楼主的继续解说。

TA的精华主题

TA的得分主题

发表于 2007-11-19 12:09 | 显示全部楼层
QUOTE:
以下是引用BrandSex在2007-11-19 12:00:19的发言
QUOTE:
 COL()

自定义函数吧?如果是UDF,那么一个就可搞定.

TA的精华主题

TA的得分主题

发表于 2007-11-19 12:18 | 显示全部楼层

楼主,继续嘛!发上来总会有人看的.

讨论牛与不牛,不合时宜吧.楼主再牛总是会被考住的,其实谁都是这样,都是人又不是神!楼主愿意和大家分享,就值得赞扬!

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-19 13:26 | 显示全部楼层

回到主题:

首先,我讲一下API中的基本线程函数,

Private Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

CreateThread函数用于创建一个新的线程,其中SECURITY_ATTRIBUTES结构决定了一个线程的是否可以被子线程继承(bInheritHandle )

Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

StackSize指栈的大小,一般都让系统自己管理,用默认值0

StartAddress的函数的地址,AddressOf [函数名]可以得到函数的地址

Parameter是传递给线程函数的参数

CreationFlags决定了线程创建后是否立即执行,默认0为立即执行,当然你可以先挂起线程,等某个事件或信号来决定线程是否执行

最后一个参数是线程的标识,其实和返回的线程句柄是一个作用,不过一般大家都用线程的句柄来操作线程

(to be continued...)

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-19 13:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用清风_ll在2007-11-19 12:09:10的发言:

自定义函数吧?如果是UDF,那么一个就可搞定.

是Column(),打错了,还忘记提IF()这么重要的复合函数了

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-11-19 13:36 | 显示全部楼层

这里有个最简单的例子

Sub TestMultiThread()
Dim i As Integer
dim hThreads(10) As Long

  For i = 1 To 5

    hThreads(i) = CreateThread(0, 0, AddressOf TestThread, i, 0, 0)

  Next i

DoEvents
'checking threads

End Sub

Sub TestThread(i as Interger)
'do something
End Sub

有什么看不懂的地方大家可以问啊

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 22:09 , Processed in 0.045661 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表