打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
终于解决了TTS的speak朗读完成问题
2011年06月27日 00:45:00

speak完成如何判断?如何使用SpVoice.SpeakCompleteEvent,这个问题困扰了我两天,最后看到msdn上的例子才知道要使用WaitForSingleObject函数处理它返回的时间句柄,之前的想speak或者偏移量的是多么荒谬啊。

peech API 5.3

Object: SpVoice
Type: Hidden

  1. SpVoice.SpeakCompleteEvent() As Long
Return Value

A Long variable containing the event handle.

Example
  1. Dim objVoice As SpeechLib.SpVoice
  2. Dim lngHandle As Long
  3. Dim lngRtn As Long
  4. Const INFINITE = -1&
  5. Set objVoice = New SpVoice
  6. objVoice.Speak "please wait until this text has been spoken", SVSFlagsAsync
  7. lngHandle = objVoice.SpeakCompleteEvent 'Get a handle on this stream
  8. lngRtn = WaitForSingleObject(lngHandle, INFINITE) 'Wait for completion
一开始用 if WaitForSingleObject(SpVoice.SpeakCompleteEvent, INIFINTE) = WAIT_OBJECT_0 then判断发现当朗读时它会一直读下去,界面上按钮都不能点,
就改成WaitForSingleObject(SpVoice.SpeakCompleteEvent, 200)就好了,其中也参考了下面百度文库中的文章

一下子跳到等待函数 WaitForSingleObject, 是因为下面的 Mutex、Semaphore、Event、WaitableTimer 等同步手段都要使用这个函数; 不过等待函数可不止 WaitForSingleObject 它一个, 但它最简单.

function WaitForSingleObject(

hHandle: THandle; {要等待的对象句柄}

dwMilliseconds: DWORD {等待的时间, 单位是毫秒}

): DWORD; stdcall; {返回值如下:}

WAIT_OBJECT_0 {等着了, 本例中是: 等的那个进程终于结束了}

WAIT_TIMEOUT {等过了点(你指定的时间), 也没等着}

WAIT_ABANDONED {好不容易等着了, 但人家还是不让咱执行; 这一般是互斥对象}

//WaitForSingleObject 的第二个参数一般给常数值 INFINITE, 表示一直等下去, 死等.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
教你写最简单的脚本 让电脑帮你表白
WaitForSingleObject函数的使用
WaitForSingleObject的用法--小浪的博客
c中WaitForSingleObject函数解析(1)
VC 线程间通信
在主线程中慎用WaitForSingleObject (WaitForMultipleOb...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服