私はしばらくの間私を悩ませてきた問題を抱えています。私のプロジェクトの各子スレッドは正しく実行されており、87 に設定された Last Error でスレッドを開始することを除いて、想定されていることを実行しています。
87 は、Win32 システム エラーによる無効なパラメータを意味します。LastError はスレッド固有であり、ThreadProc 関数の最初の行から設定されているように見えるため、推測できる唯一のことは、ThreadProc 関数自体が何らかの形で構文的に間違っている (?) ことです。
私の OS は 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
スレッドを呼び出してデータを渡す方法のエラーだと思いますが、ドキュメントを読んでもこのエラーを推測することはできません。何か案は?