lambda 表达式 作为参数,作为 std::thread 参数,和 vector 链表中的变量在线程中作为消息列表的应用
创始人
2024-05-24 06:04:06
0

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 vector_pfun;

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

调用:

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

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

二:

std::function

#include

可以简单理解为 函数指针;

如 std::function pFunc;

pFunc: 一个void 类型的函数指针;

#include std::vector< std::function > 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 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 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();}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...