C ++:使DLL可以同时访问多个进程

时间:2013-09-21 18:35:50

标签: c++ windows multithreading dll

我在C ++ VS2010中创建了一个DLL。

在我看来,2个程序无法同时访问它。 第一个程序1必须完成对DLL的调用,然后DLL才会处理来自其他程序的调用。

我想知道项目设置中是否有某个开关需要设置以使DLL“多线程”。

Windows SAPI使用该DLL。一个程序(在我的例子中是两个程序)可以引用SAPI并使计算机语音(计算机语音是DLL)说话。我希望这两个程序能够同时发言,但由于它们没有(它们彼此等待),我希望我的DLL是单线程的。

谢谢。

1 个答案:

答案 0 :(得分:4)

语音API序列化来自多个来源的语音,因此它们不会同时播放。一个将首先播放,然后播放下一个,依此类推,直到不再播放待处理的演讲。您可以通过注册表禁用此功能,如下所述: http://msdn.microsoft.com/en-us/library/ee431801(v=vs.85).aspx#_Toc494873956

特别是NoSerializeAccess中的HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Speech\AudioOutput\<AudioOutput1>\Attributes<AudioOutput1>,其中{{1}}是音频输出设备的名称。

此信息可在http://msdn.microsoft.com/en-us/library/speechplatform_ispaudio.aspx

找到
  

为了防止多个TTS语音或引擎同时说话,Speech Platform将输出序列化为实现ISpAudio接口的对象。要禁用对ISpAudio对象的输出序列化,请在其对象标记的Attributes文件夹中放置一个名为“NoSerializeAccess”的属性。