Chỉ cần thử nghiệm, nhưng tôi đã tự hỏi nếu nó có thể làm cho công việc này mã (như trong biên dịch):Sử dụng CreateThread với một 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();
}
Tôi có nghi ngờ cằn nhằn này vì chữ ký tiêu chuẩn cho một callback LPTHREAD_START_ROUTINE
là DWORD WINAPI Callback(PVOID)
Tôi sẽ không thể thực hiện việc này để biên dịch mà không cần thêm thẻ WINAPI
(nhưng theo ngữ pháp bất hợp pháp). Nói đến điều gì, các thuộc tính WINAPI
và CALLBACK
(cho biết WndProc
) là gì? Tôi chưa bao giờ thực sự hiểu tại sao trong một số trường hợp bạn có thể có nhiều thuộc tính trên một hàm.
'main' là bắt buộc để có' int' làm kiểu trả lại. Bạn cũng cần một lambda '__stdcall', điều này là không thể. Bạn có thể bọc nó để có một lambda (hoặc bất cứ điều gì), mặc dù, hoặc chỉ sử dụng ''. –
chris
Vì bạn rõ ràng đang sử dụng C++ 11, tại sao không chỉ sử dụng 'std :: thread' mà là di động và tích hợp tốt với lambdas, thay vì nền tảng cụ thể' CreateThread'? – syam
Tôi chỉ mới bắt đầu học. Nhưng tôi sẽ xem xét điều đó. Cảm ơn! – sircodesalot