最近做了一个复读机程序.用到了MCIControl空件.程序大致如下:for i=0 to 10 ' 共10个wav语段
play 1.wav file ' 此处播放第i 个wav文件.由于MCIControl是异步执行的.所以下边要延时.
delay time
record the sound ' 录音,下边也要延时
delay time
next i现有一个问题.程序界面添加一暂停按纽. 怎么办呢?能不能从进程方面解决呢?
play 1.wav file ' 此处播放第i 个wav文件.由于MCIControl是异步执行的.所以下边要延时.
delay time
record the sound ' 录音,下边也要延时
delay time
next i现有一个问题.程序界面添加一暂停按纽. 怎么办呢?能不能从进程方面解决呢?
如:
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
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
API
这个等待是内核的,可以在进程之间使用。
还有别的WAITFOR 函数,可以查找下相关的资料。
另外别人的方案也可以,我觉得未必需要使用这个,这个一般用于多线程互斥的。
经过大家的帮助,以下方法可以实现暂停功能,且能正常运行.但还有一个问题,由于使用了循环来延时, 程序运行后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
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
问题在与,它们播放音乐都是异步执行的.
而我要实现一个循环,播放标准音,录音,播放录音的过程.问提的关键是要延时.
而延时是以牺牲CPU的运行为代价的,大家想想能不能从其他方面入手呢.