我有一个pthread_t
数组,它们是通过pthread_create
在for循环中启动的。
我有大量预先声明的变量,对于线程的内部工作很重要。我希望有一个匿名内部函数作为pthread_create
的启动例程,如此:
pthread_create(threads[i], NULL,
{ inner function here }
, NULL);
我知道C ++特别没有这个,所以我想也许lambdas可能会有所帮助,或者也许有人有另一个想法,所以我不必创建一个单独的方法并交出之前的所有变量{ {1}}。
答案 0 :(得分:3)
如果lambda表达式没有捕获任何内容,the lambda object can be converted to a C function pointer,那么这样的东西就可以了:
pthread_t thr;
pthread_create (&thr, NULL,
[] (void *closure) -> void * {
return nullptr;
}, NULL);
需要void *
的显式返回类型,因为推断的返回类型通常不正确。由于您无法使用捕获,因此需要使用closure
参数传递指向对象的指针(并使用static_cast
将其转换为lambda中的正确类型),并且终身使用原因,可能需要在堆上分配它。
(另请注意pthreads[i]
作为pthread_create
的第一个元素看起来不正确,它是用于返回部分结果的指针,即新线程的ID。)< / p>