考虑以下计划:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
int main(int argc, char** argv) {
for (int i = 0; i < 10; i++) {
Beep(220 * i, 250);
printf("%d\n", 22o * i);
}
return 0;
}
这会产生250毫秒的声音并打印出该声音的频率。然而,由于它在哔哔声之间睡觉,打印之间会有延迟。
相反,做printf("\a");
之类的事情却没有在哔哔声之间睡觉。我知道它并不完全等同于Beep()
,因为你无法调制声音或改变持续时间,但我感兴趣的是声音之间的零睡眠。
我希望Beep()
使用持续时间为250毫秒的声音,但我不希望程序在它们之间睡眠。我有一个粒子模拟器,当发生碰撞时会产生Beep()
的声音,但是当声音正在播放时,模拟会在持续时间内停止。我想让它发出250ms的哔哔声,但不涉及睡眠。
我有什么选择?
答案 0 :(得分:2)
而不是在主线程中播放声音, 实例化一个用于播放蜂鸣声的线程。
然后让线程在发出哔哔声时自行杀死它。
Here是一个创建线程的教程:
此代码已从教程中获取,然后根据您的需要进行修改:
#include <pthread.h>
#include <stdio.h>
/* This is our thread function. It is like main(), but for a thread*/
void *threadFunc(void *arg)
{
for (int i = 0; i < 10; i++) {
Beep(220 * i, 250);
}
return NULL;
}
int main(void)
{
pthread_t pth; // this is our thread identifier
int i = 0;
pthread_create(&pth,NULL,threadFunc,"foo");
printf("%d\n", 22o * i);
while(i < 100)
{
usleep(1);
printf("simulation continues...\n");
++i;
}
printf("main waiting for thread to terminate...\n");
pthread_join(pth,NULL);
return 0;
}