CreateThread() 関数を使用して簡単なプログラムを作成しようとしています。LPSTR
struct 内の新しいスレッド関数に引数を渡す必要がありますpDataArray
。MSDNの例(MSDN CreateThread() Example)に従っています。
typedef struct MyData {
LPSTR val1;
int val2;
} MYDATA, *PMYDATA;
メイン関数 (CreateNewThread) は、別の関数からLPSTR command
サンプル テキスト"hi all"を含む変数を受け取り、正しく動作し、正しく構造体に導入されますが、それをスレッド化された関数 (MyThreadFunction) に送信しようとすると、多くの奇妙なエラーが返されます文字、メモリダンプ私は推測します:
DEBUG: Inside CreateThread string: hi all
DEBUG: Before send to function: hi all
DEBUG: Inside MyThreadFunction data: ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠☻☻☻☻WinSock 2.0
CreateThread 関数のコードは次のとおりです。
int CreateNewThread(LPSTR command, int numThread)
{
printf("\nDEBUG: Inside CreateThread string: %s\n",command);
PMYDATA pDataArray[MAX_THREADS];
DWORD dwThreadIdArray[MAX_THREADS];
HANDLE hThreadArray[MAX_THREADS];
// Allocate memory for thread data.
pDataArray[numThread] = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(MYDATA));
if( pDataArray[numThread] == NULL )
{
ExitProcess(2);
}
// Generate unique data for each thread to work with.
pDataArray[numThread]->val1 = command;
pDataArray[numThread]->val2 = 100;
printf("\nDEBUG: Before send to function: %s\n",pDataArray[numThread]->val1);
// Create the thread to begin execution on its own.
hThreadArray[numThread] = CreateThread(
NULL, // default security attributes
0, // use default stack size
MyThreadFunction, // thread function name
pDataArray[numThread], // argument to thread function
0, // use default creation flags
&dwThreadIdArray[numThread]); // returns the thread identifier
if (hThreadArray[numThread] == NULL)
{
ErrorHandler(TEXT("CreateThread"));
ExitProcess(3);
}
return 0;
}
MyThreadFunction() のコードは次のとおりです。
DWORD WINAPI MyThreadFunction( LPVOID lpParam ){
PMYDATA pDataArray;
pDataArray = (PMYDATA)lpParam;
LPSTR data = pDataArray->val1;
printf("\nDEBUG: Inside MyThreadFunction data: %s\n",data);
return 1;
}
LPSTR
スレッド化された関数に変数を送信する正しい方法を教えてもらえますか?
アドバイスありがとう。