【发布时间】:2014-03-06 11:50:33
【问题描述】:
我是多线程(Windows)的初学者。我想通过在 for 循环中使用 CreateThread 函数来创建 2 个线程。但是我想产生的两个线程函数是不同的。所以我正在创建一个函数指针数组来存储我想要生成的两个函数。我将在创建线程函数的 lpStartAddress 参数中使用数组值。但是我在创建函数指针数组时遇到错误。我只发布了下面代码的重要部分。所以请纠正我的错误并帮助我创建一个函数指针数组(其函数将作为线程产生)。提前致谢。
DWORD WINAPI Threadproc1(LPVOID lparam)
{
print_func(GetCurrentThreadId(),(LPDWORD)lparam);
return 1;
}
DWORD WINAPI Threadproc2(LPVOID lparam)
{
print_func(GetCurrentThreadId(),(LPDWORD)lparam);
return 1;
}
int main()
{
HANDLE hThread[MAX_THREADS] = {NULL};//MAX_THREADS=2
DWORD dwthreadid;
/* Array of lparam */
DWORD dwArrayparam[PARAM_MAX] = {1,2};//PARAM_MAX=2
/* Array of function ptrs */
typedef DWORD WINAPI (*t_Threadproc)(LPVOID);//ERROR in this line
t_Threadproc Threadproc[MAX_THREADS] = {Threadproc1,Threadproc2};
for(int i=0; i<MAX_THREADS; i++)
{
hThread[i] = CreateThread(NULL,//security attributes
0,//stack size
Threadproc[i],//thread start address
(dwArrayparam+i),
0,
&dwthreadid
);
}
}
编译错误: 我得到的错误是错误 C2059:语法错误:'(' 如果我删除调用约定 WINAPI 我会在下一行出现错误 错误 C2440:“正在初始化”:无法从“DWORD (__stdcall *)(LPVOID)”转换为“t_Threadproc”
【问题讨论】:
-
2 个线程??只需调用两次 CreateThread?
-
你遇到了什么错误?
-
@Martin James 是可以做到的,但实际情况是我有更多线程。为简单起见,我只是缩小了问题的范围。
-
发布有关编译器错误的问题时,实际上能够知道错误是什么通常非常有帮助。请编辑您的问题以包含完整且未经编辑的错误日志。
-
@o_weisman 我得到的错误是 error C2059: syntax error : '('
标签: c windows multithreading winapi