【发布时间】:2010-03-12 02:48:07
【问题描述】:
我正在编写一个简单的控制台应用程序,它允许我从一组通过我提供的参数传递的参数创建多个线程。
DWORD WINAPI ThreadFunc(LPVOID threadData)
{
}
我将它们打包到一个结构中,并将它们作为参数传递给 CreateThread 方法,并尝试通过将它们从 LPVOID 转换为与我的结构相同的类型来解压它们。
我不确定如何在通过后将其转换为结构,以便我可以在方法本身中使用它,我尝试了各种组合(附加示例)但它不会编译。
结构:
#define numThreads 1
struct Data
{
int threads;
int delay;
int messages;
};
调用方法:
HANDLE hThread;
DWORD threadId;
struct Data *tData;
tData->threads = numThreads;
tData->messages = 3;
tData->delay = 1000;
// Create child thread
hThread = CreateThread(
NULL, // lpThreadAttributes (default)
0, // dwStackSize (default)
ThreadFunc, // lpStartAddress
&tData, // lpParameter
0, // dwCreationFlags
&threadId // lpThreadId (returned by function)
);
我的尝试:
DWORD WINAPI ThreadFunc(LPVOID threadData)
{
struct Data tData = (struct Data)threadData;
int msg;
for(msg = 0; msg<5; msg++)
{
printf("Message %d from child\n", msg);
}
return 0;
}
编译器错误:
错误 C2440:“类型转换”:无法从“LPVOID”转换为“数据”
如您所见,我已经实现了一种循环遍历多个消息的方法,我正在尝试使事情变得更高级并添加一些进一步的功能。
【问题讨论】:
-
我已经标记了正确的答案,但根本问题是你不了解指针或动态分配,所以你还没有准备好线程。
-
我在一定程度上理解,我将按照给出的答案阅读它们。