TC官方合作论坛

标题: 关于大漠多线程怎么注册多个对象 [打印本页]

作者: luoliang0    时间: 2014-5-14 07:08
标题: 关于大漠多线程怎么注册多个对象
这个问题困扰我很久了,今天查了下。有些收获,分享给大家。动态链接库(Dynamic Link Library或者Dynamic-link library,缩写为DLL),是微软公司在微软视窗操作系统中实现共享函数库概念的一种实作方式。DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。这些库函数的扩展名是.DLL、OCX(包含ActiveX控制的库)或者.DRV(旧式的系统驱动程序)。函数的可执行代码位于一个DLL 中,该DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。大漠,我认为就是个动态链接库。多线程中动态链接库的使用
请问在多线程内是否可以重复加载动态链接库,对一个DLL的变量,如果希望每个使用DLL的线程都有自己的值应该怎么做呢?

------解决方案--------------------
dll是被加载到进程空间的,LoadLibrary返回的值是dll加载到的进程空间地址,所以都是一样的。这和多线程没有关系。  


一个dll在EXE中只会被加载一次,再次调用LoadLibrary仅仅增加模块句柄的引用计数而已,所以无需每个线程都调用LoadLibrary,可以直接使用句柄,或者用GetModuleHandle来获取已加载dll的句柄。

------解决方案--------------------
动态连接库和Win是一样的,
各个线程都有各自的空间,
不会相互影响。
可以放心使用。

其实动态链接库不管怎么调用都不会冲突的。
不管是多线程,多进程,都不会出问题。

只要不是静态链接库。
------解决方案--------------------
线程加载DLL后,该dll中用到的变量就被加载到线程本身的栈空间里面去了
所以多个线程同时使用dll不会冲突

作者: luoliang0    时间: 2014-5-14 07:09
沙发自己的
作者: luoliang0    时间: 2014-5-14 07:09
沙发自己的
作者: 88979825    时间: 2014-5-14 08:15
每日一水,水水更健康
作者: luoliang0    时间: 2014-5-17 05:38
没人来啊
作者: zxk123    时间: 2014-8-8 00:07
这个...我也想知道个明白啊!
到底有个权威的人来论证一下才行呀
作者: awlbm    时间: 2014-9-14 19:22
能够举例说明吗?





欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1