Lambda im CreateThread-Aufruf
-
Sers ^^
folgendes Problem habe ich mit C++11:
Ich möchte im Aufruf von CreateThread die zu startende Funktion per Lambda definieren:CreateThread(0, 0, [] (void* param) { while (1) { if (GetAsyncKeyState(VK_ESCAPE)) ExitProcess(0); } }, 0, 0, 0);
\main.cpp|15|error: invalid user-defined conversion from 'WinMain(HINSTANCE, HINSTANCE, LPSTR, int)::<lambda(void*)>' to 'LPTHREAD_START_ROUTINE {aka long unsigned int (__attribute__((__stdcall__)) )(void)}' [-fpermissive]|
Hab schon verschiedenstes probiert, komme aber nicht dahinter.
MFG, DerCoder
-
Schau dir mal an, was die Thread Prozedur für eine Signatur haben muss...
Abgesehen davon: Falls du MSVC benutzt, brauchst du MSVC 11 und solltest CreateThread sowieso nicht verwenden (sofern du die CRT benutzt) sondern _beginthread(ex).
-
Ne, ich benutze mingw 4.7.
Und ich kenne Lambdas erst seit gestern und hab daher eher weniger Ahnung, wie ich den Lambda-Functor gestalten muss.
-
-
Hilft mir nicht weiter, trotzdem thx.
-
Um CreateThread(..) als Thread Function eine Lambda Funktion übergeben zu können muss mindestens eine Konvertierung von Lambda nach Functionpointer möglich sein. Dies ist in C++ 11 der Fall, jedoch von VS2010 SP1 noch nicht implementiert.
Diese Konvertierung ist mindestens nötig, desweiteren müsste die Calling Convention (WINAPI wird von CreateThread verlangt) auch setzbar sein - was ich im Moment bezweifle dass das möglich sein wird.
Der Rede kurzer Sinn: Es geht nicht was Du vorhast (Edit: Diese Aussage bezieht sich auf VS2010 SP1, ich vermute jedoch das bei mingw dasselbe Problem besteht).
Edit:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3043.html