0

代替

CreateThread(NULL, NULL, function, NULL, NULL, NULL);

我有兴趣尝试

CreateThread(NULL, NULL, [](LPTHREAD_START_ROUTINE){ int x = 0; return x;}, NULL, NULL, NULL);

我得到错误:从 lambda []int (LPTHREAD_START_ROUTINE)->int 到 LPTHREAD_START_ROUTINE 不存在合适的转换函数。

4

1 回答 1

2

lambda 函数上的签名不正确。它需要接受void*和返回DWORD。尝试以下

LPTHREAD_START_ROUTINE pStart = [](void* pValue) -> DWORD { int x = 0; return x; };
::CreateThread(NULL, NULL, pStart, NULL, NULL, NULL);

注意:我相信这只适用于 Visual Studio 2012 及更高版本。我不相信在那之前实现了 lambda 到函数指针的转换

于 2013-08-21T22:17:27.013 回答