Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: WinAPI ::  Lambda im CreateThread-Aufruf     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
DerCoder
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.07.2009
Beiträge: 183
Beitrag 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: 5618
Beitrag 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
Beitrag 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




Beitrag brain.exe Unregistrierter 13:29:38 24.06.2012   Titel:   output fetched            Zitieren

http://msdn.microsoft.com/en-us/library/dd293603.aspx
DerCoder
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.07.2009
Beiträge: 183
Beitrag 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: 4079
Beitrag 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
c++.de :: WinAPI ::  Lambda im CreateThread-Aufruf   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.