DWORD WINAPI Fun1(LPVOID) 宣告回傳 DWORD,但函數本體缺少 return 語句,導致編譯錯誤 C4716: 'Fun1': must return a value。
DWORD WINAPI Fun1(LPVOID lpParameter)
{
char* buf = static_cast<char*>(lpParameter);
std::cout << reinterpret_cast<uintptr_t>(buf) << std::endl;
Sleep(1000);
return 0; // 必須回傳 DWORD
}
(LPVOID)i 將整數強轉指標,線程內再轉回 intptr_t 取值,避免 64 位元截斷TerminateProcess (會殺掉整個進程),改用 WaitForSingleObject + CloseHandleCloseHandle,否則洩漏核心物件int main()
{
HANDLE hThread[2];
for (int i = 0; i < 2; ++i) {
hThread[i] = CreateThread(nullptr, 0, Fun1,
reinterpret_cast<LPVOID>(static_cast<intptr_t>(i)), 0, nullptr);
}
std::cout << "3" << std::endl;
WaitForMultipleObjects(2, hThread, TRUE, INFINITE); // 等待所有線程結束
for (int i = 0; i < 2; ++i) CloseHandle(hThread[i]);
return 0;
}
優先使用 std::thread + std::jthread (C++20) 或 std::async,配合 RAII 管理生命週期,避免原生 API 易錯誤。