2013-08-21 71 views
0

而不是在c使用lambda表達式++ 11 visualstudio11與WINAPI

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

我很感興趣,試圖

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

我得到錯誤:從拉姆達[] INT(LPTHREAD_START_ROUTINE)沒有合適的轉換功能 - > int到LPTHREAD_START_ROUTINE存在。

回答

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函數指針轉換之前執行