soa*_*dos 7 c++ multithreading visual-c++ c++11 visual-studio-2012
我有一个名为workForThread的函数,它接受两个参数,并返回void.我想使用类似的东西来修改此函数:
thread(workForThread,a,b);
Run Code Online (Sandbox Code Playgroud)
在哪里a和b在适当的类型.上面的代码没有编译,给出了"太多的调用参数"错误("错误C2197:'void(__ cdecl*)(char*)':调用的参数太多了"
我该如何解决这个问题?
注意:我已经看过这 两个问题,但那里的解决方案对我来说似乎不起作用.另外,我觉得有一种方法可以在c ++ 11中内置它,这就是我要找的东西.
jua*_*nza 13
在C++ 11中,执行此操作的方式或多或少与您尝试的方式相同:
std::thread myThread(workForThread,a,b);
Run Code Online (Sandbox Code Playgroud)
提供的workForThread是一个(非成员)函数,它接受这两个参数.
使用C++ 11时,您可以使用lambda函数,该函数可以使用上下文的(非正式)参数."捕捉"
就像是
void doIt (int a, int b) { // do something, your workForThread
}
..
int a = 1;
int b = 2;
std:thread r ([=](){doIt (a, b); return 1;});
Run Code Online (Sandbox Code Playgroud)
当只调用单个函数时,juanchopanza的答案可能会更有效,因为不会创建新的函数.
lambda版本允许您配置更多.假设您正在启动线程,最终调用2个函数.juanchopanza方法将需要NAMED函数用于每个排列.
目前我认为两种方法的差异主要是品味问题.
当您想要阅读有关lambda函数的更多信息时
| 归档时间: |
|
| 查看次数: |
12390 次 |
| 最近记录: |