社区
VB基础类
帖子详情
vb不支持多线程??
lilymiao
2004-07-09 10:33:53
如题,真的么?
...全文
383
5
打赏
收藏
vb不支持多线程??
如题,真的么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
flyingZFX
2004-07-09
打赏
举报
回复
非要用线程呀,多不稳定呀,,
还是用DDE好呀,,功能和线程差不多嘛
viena
2004-07-09
打赏
举报
回复
不论用什么,线程同步都是一个头疼的问题,一般只能在主线程显示用户界面,其它线程执行一些后台任务
huangjianyou
2004-07-09
打赏
举报
回复
我什么都没说,我转载过来的。
dullwolf
2004-07-09
打赏
举报
回复
VB无所不能,谁说VB不好,我就气愤。
huangjianyou
2004-07-09
打赏
举报
回复
转载:
多线程与VB
“协作式多任务”、“抢占式多任务”、“多进程”、“多线程”这些词真可以算是如雷贯耳了,不过词是词,了解是了解,两回事。我曾经煞有介事的向一个同学说明什么是“多进程”,什么是“多线程”,不多久就发现我的解释是完全错了的,所以现在我要讲的是 β2 版,有什么错误敬请提出。:)
先说说“协作式多任务”和“抢占式多任务”。在 Windows 3.1 中,多任务方式是“协作式多任务”,意思是说一个任务得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行;而在 Windows 95 中使用的就是“抢占式多任务”了,它的总控制权在 Windows 手中,Windows 会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,Windows 会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务……。这种方式上的不同造成 95 和 3.1 性能上的不同:3.1 中如果有一个任务死锁,则系统也同样死锁;95 中有一个任务死锁,系统仍能正常运行。
再说说“多进程”和“多线程”。同一个程序的多个运行的副本就是“多进程”了;在 Windows 95 中,一个进程只是一段放置程序的内存,只有线程才是真正运行的任务,所以一个进程至少包含一个线程,事实上,系统为每一个进程创建一个缺省线程,叫做主线程,主线程可以创建子线程,子线程仍然可以再创建子线程,这就是“多线程”了。Windows 对待线程是一视同仁的都作为一个任务看待的,并不对主线程有什么优惠,这和 OS/2 稍有不同:Windows 下一个进程中只要有一个线程在运行就不终止,但在 OS/2 下主线程结束时会同时关闭所有的子线程。有一个同事对 OS/2 的这种线程管理方式很赞赏,我却不以为然,我以为让线程自然的结束会比强制结束好的多。
Windows 3.1 是没有“多线程”的概念的,因为没有意义,只有在“抢占式多任务”的方式下,“多线程”才有其用武之地。
“多线程”的“Hello World”是文件复制。在进行一个大文件的复制时,虽然复制窗体上有一个“取消”按钮,但如果不是多线程,就只有到了文件复制完毕时程序才知道用户按了“取消”钮,典型的先斩后奏,非我所欲也。当然也不是完全没有办法解决,在 VB 中是用“DoEvents”,C 中是用“PeekMessage”,不过在“协作式多任务”中这实在是一个危险的办法——此函数不知道什么时候返回,但是硬件不等人,所以也只是没有办法的办法,何况即使在“抢占式多任务”,这样做的效率也是很低的。而用“多线程”,可以用一个线程执行“疯狂拷贝”,一个线程监视按钮状态,在用户按下了“取消”按钮时,程序马上就可以知道,并且马上“取消”了。
“多线程”的说明到此为止,以下我要说一说 VB 的多线程问题。
官方的文件说 VB 不支持多线程,这其实是说 VB 中的语句并不都是线程安全的,但是哪些是线程安全的,他们不说,我们也不知道,只有靠实践,我还没有实践,所以也不知道。但是这并不是说 VB 程序真的是“单线程”的程序,事实上至少每一个 ActiveX 控件都是一个线程,所以如果大家对 ActiveX 控件没有我这样的恶感,大可开发一个 ActiveX 控件实现安全的多线程程序。至于 VB 缺省的控件是否也是用多线程实现的,我还不知道,各位如有兴趣,可以测试一下。
在我做的多线程的例子里曾说过 VB 提供的“CreateThread”函数的说明是错误的,关键在“函数地址”那一项使用了缺省的“ByRef”,而实际应该是“ByVal”的。此函数第一个参数是指定新线程的属性,产生安全描述符用的,可以传一个“NULL”过去,表示不在乎,我在我的例子里就是这样做的;第二个参数指定新线程的栈大小,也可以传一个“0”过去,说明和主线程一样;第三个参数是函数地址,用“AddressOf”得到;第四个是参数指针;第五个是创建标志,缺省值是“NULL”,表示立即执行,可斟酌使用;最后一个是用来返回线程的线程标识符。
新线程函数定义为“Function 线程函数(ByVal 参数 As Long) As Long”。“CreateThread”函数的参数一般情况下用缺省值就可以了,但是如果想传递参数到新线程,C 不用说,指针是它的长项,只是在 VB 中,虽然可以用“VarPtr”函数取得变量地址,但是这个地址对于 VB 程序本身却几乎是无用的,就是“线程函数”中得到的那个“参数”几乎是无用的。我说几乎是无用的,就是说事实上还是有用的。:) 如果有很多参数要传递,使用“CopyMemory”是可以实现的,不过,这绝对是一个危险函数,不到不得已不用也罢;但是如果只需要传递一个小于 32 位的值,我们就可以大张旗鼓的用这个“参数”了——虽然系统说此参数是指针,不过传入传出以及解释权都是由你控制,谁也不能阻止你将一个“Long”按值传递给“线程函数”,甚至如果你希望传递的是一个“Single”,也只需要修改“CreateThread”和“线程函数”的说明即可,不用我多说了吧!当然,最简单的方法有时候最有效——用全局变量,没有限制,只是有些麻烦。:)
对 VB 来说,简单的多线程程序还需要用到“ExitThread”,一般还要用到“SuspendThread”、“ResumeThread”,这几个函数相对简单的多,就不多说了。不过如果是复杂的多线程,就要用到一些线程同步的 API 了,我还没有用到,总不能空穴来风,所以也不说了。
一九九九年十二月三日
稳定、方便、实用的
VB
6
多线程
技术(附老马的ActiveX
多线程
示例)
VB
6
多线程
技术,已经测试。稳定、方便、实用的
VB
6
多线程
技术(附老马的ActiveX
多线程
示例)
vb
6实现安全
多线程
的ActiveX组件
一个用于
vb
6实现安全
多线程
的ActiveX组件,非常值得下载。
VB
for Android12.12
世界上第一个
vb
语言的Android开发软件。
vb
.net
vb
.net资料大权
DirectX修复工具 V3.3增强 绿色版
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.3版分为标准版、增强版以及在线修复版。其中的标准版以及增强版都包含完整的DirectX组件。除此之外,增强版中还额外包含了c++ Redistributable Package,因此增强版不但能解决DirectX组件的问题,而且还能解决c++组件异常产生的问题。增强版适合无法自行解决c++相关问题的用户使用。在线修复版的功能与标准版相同,只是其所需的文件将通过Internet下载,因此大大减小了程序的体积。本程序的各个版本之间,主程序完全相同,只是配套使用的数据包不同。因此,当您使用标准版数据包时,程序将进行标准修复;当您使用增强版的数据包时,程序将进行增强修复;当数据包不全或没有数据包(即只有DirectX Repair.exe程序)时,程序将进行在线修复。在线修复、离线修复可自由灵活组合,充分满足不同用户的需要。 本程序自V2.0版起采用全新的底层程序架构,使用了异步
多线程
编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的
支持
,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也
支持
通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了4项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“DirectX版本”选项卡可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。 本程序的官方博客地址为:http://blog.csdn.net/
vb
com/article/details/6962388 所有的更新以及技术
支持
都可以到该博客上找到。
VB基础类
7,788
社区成员
197,583
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章