【发布时间】:2013-09-21 18:35:49
【问题描述】:
我在 C++ VS2010 中创建了一个 DLL。
在我看来,两个程序不能同时访问它。 首先程序 1 必须完成对 DLL 的调用,然后 DLL 才会处理来自其他程序的调用。
我想知道项目设置中是否有某个开关需要设置以使 DLL “多线程”。
该 DLL 由 Windows SAPI 使用。一个程序(在我的情况下是两个程序)可以引用 SAPI 并使计算机语音(计算机语音是 DLL)说出一些东西。我希望两个程序同时说话,但由于它们没有(它们相互等待),我希望我的 DLL 是单线程的。
谢谢。
【问题讨论】:
-
你能提供更多关于你在做什么的细节吗?两个程序不能同时使用同一个 DLL 应该没有理由。每个都将DLL加载到自己的内存空间中并独立执行代码。在现代操作系统上,任何一个进程都不会知道或访问另一个进程。
-
有一些原因可以显示为 tmighty 所描述的。它可能在持有装载机锁的同时做很多事情。它还可以在命名事件或其他同步原语上进行同步。我们无法知道所提供的信息。但我的钱在装载机锁上。
-
@MicahCaldwell 该 DLL 由 Windows SAPI 使用。一个程序(在我的情况下是两个程序)可以引用 SAPI 并使计算机语音(在我的情况下是 DLL)说出一些东西。我希望两个程序同时说话,但由于它们没有(它们相互等待),我希望我的 DLL 是单线程的。
-
鉴于这个新信息,它听起来不像是加载程序锁。它似乎更像是试图以独占方式访问音频设备,或者由于某种原因一次只有一个进程可以访问该设备。这超出了我的知识范围,但我认为我们都同意问题不在于 DLL 是如何编译的。需要对有争议的代码路径进行进一步调查。
-
为了测试 Jeffamaphone 刚刚评论的内容,我会将程序放在两个不同的文件夹中,其中包含两个不同的 DLL 副本。这样,如果它仍然无法正常工作,您肯定知道加载 DLL 没有问题,同时使用设备或类似问题也没有问题
标签: c++ windows multithreading dll