Proprio la sperimentazione, ma mi chiedevo se è possibile fare questo lavoro di codice (come in compilazione):Utilizzare CreateThread con un 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();
}
ho questo sospetto che perché la firma standard per un LPTHREAD_START_ROUTINE
callback è DWORD WINAPI Callback(PVOID)
Non riuscirò a farlo compilare senza il tag aggiunto (ma grammaticamente illegale) WINAPI
. A proposito, quali sono esattamente gli attributi WINAPI
e CALLBACK
(per esempio WndProc
)? Non ho mai veramente capito il motivo per cui in determinate circostanze potresti avere più attributi su una funzione.
'main' è necessario avere' int' come tipo di ritorno. Dovresti anche avere un lambda '__stdcall', che non è possibile. Puoi avvolgerlo per fare un lambda (o qualsiasi altra cosa), comunque, o semplicemente usare ''. –
chris
Dato che ovviamente stai usando C++ 11, perché non usare semplicemente 'std :: thread' che è portatile e si integra bene con lambdas, invece del' CreateThread 'specifico della piattaforma? – syam
Ho appena iniziato a studiare. Ma esaminerò quello. Grazie! – sircodesalot