C++ thread pass multiple functions and arguments via lambda expression

#include "Model/Util.h"

char *Util::uuidValue = (char *)malloc(40);

void Util::threadLambda6(int xx,int yy,string sstr)
{
    thread t1([](int x,int y,string str)
    {
        cout<<endl;
        printNumUuid2(x);
        cout<<endl;
        printUuidNum3(y);
        cout<<endl;
        printStr(str);
    },xx,yy,sstr);
    t1.join();
}

void Util::thread5(int xx,int yy,string sstr)
{ 
    thread t1([](int x,int y,string str)
    {
        printNumUuid2(x);
        cout<<endl<<endl;
        printUuidNum3(y);
        cout<<endl<<endl;
        printStr(str);
        cout<<endl<<endl;
    },xx,yy,sstr);
    t1.join();
}

void Util::printStr(string str)
{    
    cout<<str<<endl;
    cout<<"FILE:"<<__FILE__<<",FUNCTION:"<<__FUNCTION__<<",LINE:"<<__LINE__<<endl;
}

char *Util::getUuid1()
{
    uuid_t newUUID;
    uuid_generate(newUUID);
    uuid_unparse(newUUID, uuidValue);
    return uuidValue;
}

void Util::printNumUuid2(int x)
{
    Util ul;
    for(int i=0;i<x;i++)
    {
        cout<<"Num="<<i<<","<<ul.getUuid1()<<endl;
    }
}

void Util::printUuidNum3(int y)
{
    Util ul;
    for(int i=0;i<y;i++)
    {
        cout<<ul.getUuid1()<<","<<i<<endl;
    }
}


int main(int args, char **argv)
{
    try
    {
        threadLambda33(atoi(argv[1]),atoi(argv[2]),argv[3]);
    }
    catch (const std::exception &e)
    {
        cout << e.what() << endl;
        std::cerr << e.what() << '\n';
    }
    return 0;
}

void threadLambda33(int x,int y,string str)
{
    Util ul;
    ul.threadLambda6(x,y,str);
}
g++ -g -std=c++2a -I. *.cpp ./Model/*.cpp  -o h1 -luuid -lpthread

 

posted @ 2022-04-04 16:15  FredGrit  阅读(21)  评论(0编辑  收藏  举报