只是嘗試,但我想知道如果有可能使這個代碼的工作(如編譯):使用的CreateThread與拉姆達
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();
}
我有這個嘮叨的懷疑,因爲對於一個LPTHREAD_START_ROUTINE
回調標準簽名是DWORD WINAPI Callback(PVOID)
如果沒有添加(但語法上非法)的標記,我將無法獲得此代碼。說到這個,WINAPI
和CALLBACK
(比如說WndProc
)屬性究竟是什麼?我從來沒有真正理解爲什麼在某些情況下,你可以在一個函數上有多個屬性。
'main'需要'int'作爲返回類型。你還需要一個'__stdcall' lambda,這是不可能的。不過,您可以將其包裝爲lambda(或其他),或者只使用''。 –
chris
既然你明明在使用C++ 11,爲什麼不直接使用'std :: thread',它是可移植的,並且和lambda表達式很好地集成在一起,而不是特定於平臺的'CreateThread'呢? – syam
我只是剛開始學習。但我會研究這一點。謝謝! – sircodesalot