我有一個問題困擾了我一段時間。在我的項目中的每個子線程運行正常,並做什麼是應該在87Winapi Error 87開始線程問題
87開頭的最後錯誤設置線程的例外,做根據的Win32系統錯誤表示無效參數。由於LastError是線程特定的,並且從ThreadProc函數的第一行開始,似乎設置了唯一可以推斷的是ThreadProc函數本身在語法上(?)在某種程度上是錯誤的。
我的操作系統是Windows 7 x64,編譯器是gcc版本4.6.2 我做了一個小例子程序,它在我的系統啓動帶有錯誤87集的子線程。
#include <windows.h>
DWORD WINAPI THREAD_FUNCTION(LPVOID t)
{
printf("In the child thread: Last Error is %lu\n",GetLastError());
return 0;
}
typedef struct thread_data
{
//just an id for example's sake
uint32_t id;
}thread_data;
int main()
{
HANDLE thread;
thread_data d;
d.id = 1;
printf("Main thread start:Last error is %lu\n",GetLastError());
//create the thread
thread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE) THREAD_FUNCTION,(LPVOID)&d,0, NULL);
//wait for it
WaitForSingleObject(thread,INFINITE);
CloseHandle(thread);
printf("Main thread finish: Last error is %lu\n",GetLastError());
return 0;
}
此輸出:
Main thread start:Last error is 0
In the thread: Last Error is 87
Main thread finish: Last error is 0
我想這是我所說的線程和傳遞數據的方式錯誤,但我不能閱讀文檔推斷此錯誤。有任何想法嗎?
你應該在WaitForSingleObject之後調用'CloseHandle(thread);'。 – Lundin
我知道,這只是我用來演示我的問題的一個小例子程序。爲了清楚起見,將進行編輯。謝謝 – Lefteris