在c++中同时做多个工作

Doing multiple jobs at the same time in C++

本文关键字:工作 c++      更新时间:2023-10-16

我在c++中做了一个登录命令行界面,其中一个选框将无限期运行,在下一行用户可以输入他的id和密码。我希望这两个工作,即选框和id输入在同一时间,但与下面的代码只有选框是无限时间运行。我正在使用windows操作系统,我是新的c++,所以我不能应用线程的概念。

char m[]={"- A cool marquee effect. Programmed by Roneet -"};
int main()
{
    marquee();
    cout<<setw(35)<<"Enter Username : ";
    getline(cin,str);
    cout<<setw(35)<<"Enter Password : ";
    return 0;
}
void marquee()
{
    while(a<131)
    {
        p=m[0];
        m[0]=m[c];
        m[c]=p;
        for(j=1;j<=b;j++)
            cout<<m[j];
        for(j=0;j<N;j++){}
        c--;
        cout<<"r";
        if(c<1){c=b;a++;if(a==100)N=51500;}
    }
    system("PAUSE");
}

首先,std流不是线程安全的,您需要添加std::mutex来保护每个std::cout操作。

其次,为了方便地在单独的线程中执行函数,可以使用std::async
#include <future>
std::future<void> fut = std::async(&marquee);

的例子:

#include <atomic>
#include <future>
#include <string>
#include <iostream>
std::atomic<bool> cond{ false };
void marquee()
{
    while (!cond)
    {
        std::cout << '*' << std::flush;
    }
}
int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cerr.tie(nullptr);
    std::cout << "Enter username and then password: " << std::flush;
    std::future<void> task = std::async(std::launch::async, &marquee);
    std::string user, pass;
    std::cin >> user >> pass;
    cond = true;
    task.get();
    return 0;
}