lambda 表达式 作为参数,作为 std::thread 参数,和 vector 链表中的变量在线程中作为消息列表的应用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

lambda 表达式之前的文章已经说命令std::thread 也说明了

这里简答说明一下

最简单lambda 表达式[]{};

线程直接启用lambda 表达式 std::thread([]{ while(1){...} });

或者 : std::thread([]{ ... });

或者auto pf = []{ ... } ; std::thread(pf);

从上面可以看出 lambda 表达式在处理简单逻辑线程的时候非常方便

同时如果将 lambda 表达式 变量 作为 vector 中的元素那么就可以在线程中 按顺序示例相关 lambda 函数作为线程消息队列

首先 auto 变量是不可以的

想到可以通过 函数指针的方式 作为 lambda 表达式的对象

例如

typedef void(*pfun)();

pfun pf1 = []{ printf("lambda function 1;") }

所以可以直接通过 pf1() 调用相关代码所以

std::vectior<pfun> vector_pfun;

vector.push_back([]{ ... });

调用

vector_pfun.at(0)(); //这个小括号就是执行lambda表达式

但是这里就跟问题就是如果在 [] 中用 [=] 或者 [&] , 编译错误这样就不可以用到相关变量所以需要换一个 方法

std::function

#include <functional>

可以简单理解为 函数指针

如 std::function<void( int )> pFunc;

pFunc 一个void 类型的函数指针

#include <functional>

std::vector< std::function<void()> > vector_stdFunction;

void thread2()
{
    for (int n = 0; n < vector_stdFunction.size(); n++)
    {
        vector_stdFunction.at(n)();  //执行消息队列
    }
}

void CMFCApplication3Dlg::OnBnClickedButton1()
{
    for (int n = 0; n < 100; n++)
    {
        std::function<void()> plambda = [=]() {
            AfxMessageBox(CString(std::to_string(n).c_str()));
        };
        vector_stdFunction.push_back(plambda); //添加消息队列 
    }
    //启动线程
    std::thread(thread2).detach();
}

上述代码也可以完全用 lambda 表达式

void CMFCApplication3Dlg::OnBnClickedButton1()
{  
    for (int n = 0; n < 100; n++)
    {
        std::function<void()> plambda = [=]() {
            AfxMessageBox(CString(std::to_string(n).c_str()));
        };
        vector_stdFunction.push_back(plambda); //添加消息队列 
    }


    //启动线程
    std::thread([] {

        for (int n = 0; n < vector_stdFunction.size(); n++)
        {
            vector_stdFunction.at(n)();
        }

        }).detach();

}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“lambda 表达式 作为参数,作为 std::thread 参数,和 vector 链表中的变量在线程中作为消息列表的应用” 的相关文章