在击键C++上使用蜂鸣音



所以我想帮助一个朋友做一个项目,他需要一些东西来在每次击键时发出声音。他使用 std::cin 将数据读取为整数值,我想知道是否有可能制作一个函数,该函数不会使用多线程或以某种方式重载 istream>>运算符来修改项目的其余部分,因此每次按键都会发出哔哔声。我试过这个,我知道重载概念可能很糟糕,我可能不明白多线程是如何工作的,但你能重新推荐一些文章,以便我学习解决这种问题吗?也许是 c++ 中的事件处理,但我没有找到任何通用的东西,只是游戏框架中的事件处理。也许一些提示?这是我的代码借口:

#include <iostream>
#include <thread>
#include <string>
#include <conio.h>
#include <windows.h>
using namespace std;

//compile error very bad
istream& operator>>(istream& in, int& n)
{
    int i=0;
    char c;
    string nr;
    nr.resize(30);
    do{
        c = getch();
        if(c >= '0' && c<= '9' && i < 30)
        {
            cout<<c;
            Beep(1000, 10);
            nr[i++] = c;
        }
        if(c == 'b')
        {
            i--;
            cout<<"b b";
        }
    }while(int(c) != 13);
    //maybe like this and return void?
    n = stoi(nr);
    //or like this? even tho makes no sense to me that it would work?
    return  in>>stoi(nr);
}
void playBeep()
{
    while(getch())
    {
        Beep(1000, 10);
    }
}

int main()
{
    //maybe this?
    thred t(playBeep);
    t.join();
    //or this with the operator overload somehow?
    int arr[10];
    for(int i=0; i<10;i++)
        cin>>arr[i];
    return 0;
}
PeekConsoleInput可用于

从另一个线程中窥视 stdin。您可能会错过一些事件,因为与主线程没有同步。这应该被视为一种黑客攻击,但可能足以满足您的需求。

如果您愿意放弃 C/C++ stdin API,则可以读取带有ReadConsoleInput的低级别 Win32 控制台输入事件或带有 ReadFileReadConsole的文本输入。

相关内容

  • 没有找到相关文章

最新更新