| Autor |
Nachricht |
DerCoder
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.07.2009
Beiträge: 183
|
DerCoder Mitglied
13:00:17 24.06.2012 Titel: |
Lambda im CreateThread-Aufruf |
Zitieren |
Sers ^^
folgendes Problem habe ich mit C++11:
Ich möchte im Aufruf von CreateThread die zu startende Funktion per Lambda definieren:
| C++: | 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 |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5640
|
dot Mitglied
13:05:32 24.06.2012 Titel: |
|
Zitieren |
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). |
_________________ one point of view will never reveal the entire scene.
Zuletzt bearbeitet von dot am 13:06:11 24.06.2012, insgesamt 1-mal bearbeitet |
|
 |
DerCoder
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.07.2009
Beiträge: 183
|
DerCoder Mitglied
13:26:00 24.06.2012 Titel: |
|
Zitieren |
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. |
|
|
|
 |
brain.exe
Unregistrierter
|
brain.exe Unregistrierter
13:29:38 24.06.2012 Titel: |
output fetched |
Zitieren |
|
 |
DerCoder
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.07.2009
Beiträge: 183
|
DerCoder Mitglied
13:41:14 24.06.2012 Titel: |
|
Zitieren |
Hilft mir nicht weiter, trotzdem thx. |
|
|
|
 |
theta
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 4096
|
theta Mitglied
14:29:14 24.06.2012 Titel: |
|
Zitieren |
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 |
Zuletzt bearbeitet von theta am 14:33:34 24.06.2012, insgesamt 2-mal bearbeitet |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|