最近做了一个复读机程序.用到了MCIControl空件.程序大致如下:for i=0 to 10 '  共10个wav语段
    play 1.wav file  ' 此处播放第i 个wav文件.由于MCIControl是异步执行的.所以下边要延时.
    delay  time 
    record the sound ' 录音,下边也要延时
    delay time 
next i现有一个问题.程序界面添加一暂停按纽. 怎么办呢?能不能从进程方面解决呢?

解决方案 »

  1.   

    在陈环语句外加一个变量,
    如:
    DIM II 
    for i=0 to 10 '  共10个wav语段
    DO WHILE  II=FALSE
        play 1.wav file  ' 此处播放第i 个wav文件.由于MCIControl是异步执行的.所以下边要延时.
        delay  time 
        record the sound ' 录音,下边也要延时
        delay time 
    LOOP
    next i
    再在命令按钮内
    IF II=TRUE THEN  II=TRUE ELSE II=FALSE
      

  2.   

    你可以分配一个全局变量。例如 PutStop as Boolean,按暂停就让 PutStop =True,按继续就让  PutStop =False
    for i=0 to 10 '  共10个wav语段
    DO WHILE  II=FALSE
        play 1.wav file
        do
           sleep 100
           if putstop=false then exit do
        loop
        record the sound
        delay time 
    LOOP
    next i
      

  3.   

    进程挂起,可以用WAITFOR***OBJECT
       API
      

  4.   

    waitforsingleobject等待一个事件什么的。
       这个等待是内核的,可以在进程之间使用。
       还有别的WAITFOR 函数,可以查找下相关的资料。
       
       另外别人的方案也可以,我觉得未必需要使用这个,这个一般用于多线程互斥的。
      

  5.   


    经过大家的帮助,以下方法可以实现暂停功能,且能正常运行.但还有一个问题,由于使用了循环来延时, 程序运行后CPU使用率100./. 怎样解决呢?
                
                Command1_Click  'Play 调用MCIcontrol播放wav 
                TimNow = GetTickCount()
                PauseTime = 0  
                While GetTickCount() - TimNow < GetWavSec * 1000 + 1000 + PauseTime
                    ' GetWavSec * 1000 + 1000 为需要需要延时的豪秒(wav文件的时间长度), 
                    ,PauseTime 为按下"暂停"按钮到又开始播放的时间                  DoEvents       
                      If Pause = True Then   '如果按下暂停键
                            TimeNow1 = GetTickCount()
                            While Pause = True
                               DoEvents
                            Wend
                            PauseTime = GetTickCount() - TimeNow1  ' 得到暂停时间
                      End If
                Wend
    其中Pause ,PauseTime 为全局变量
    Private Sub CmdPause_Click()
        If Pause = False Then
            Pause = True
        Else
            Pause = False
        End If
    End Sub
      

  6.   

    为什么不用
    Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"(Byval lpstrCommand As String,ByVal lpstrRetumString As String,ByVal uReturnLength As long,ByVal hwndCallback as long) As long
      

  7.   

    我想,用API和MCIcontrol应该是一样的.
    问题在与,它们播放音乐都是异步执行的.
    而我要实现一个循环,播放标准音,录音,播放录音的过程.问提的关键是要延时.
    而延时是以牺牲CPU的运行为代价的,大家想想能不能从其他方面入手呢.