Wystarczy eksperymentowanie, ale zastanawiałem się, czy to możliwe, aby to działało kodu (jak w kompilacji):Zastosowanie CreateThread z lambda
void main() {
int number = 5;
DWORD(*dontThreadOnMe)(PVOID) = [](PVOID data) {
int value = *(int*) data;
cout << value << endl;
cout << "This callback executed successsfully" << endl;
};
CreateThread(NULL, NULL, dontThreadOnMe, &number, NULL, NULL);
cin.get();
}
mam ten dokuczliwy podejrzenie, że ponieważ średnia podpis na LPTHREAD_START_ROUTINE
zwrotnego to jest DWORD WINAPI Callback(PVOID)
Nie będę mógł tego skompilować bez dodanego (ale gramatycznie nielegalnego) tagu WINAPI
. Mówiąc o tym, czym dokładnie są atrybuty WINAPI
i (na przykład)? Nigdy tak naprawdę nie rozumiałem, dlaczego w pewnych okolicznościach można mieć wiele atrybutów funkcji.
'main' jest wymagane, aby' int' był typem zwracanym. Będziesz także potrzebował lambda '__stdcall', co nie jest możliwe. Możesz go zawijać, aby uzyskać lambdę (lub cokolwiek), lub po prostu użyć ''. –
chris
Skoro oczywiście używasz C++ 11, dlaczego nie użyć po prostu 'std :: thread', który jest przenośny i dobrze integruje się z lambdas, zamiast specyficznego dla platformy' CreateThread'? – syam
Dopiero zacząłem się uczyć. Ale przyjrzę się temu. Dzięki! – sircodesalot