Windows 中的多线程 - 创建函数指针数组时出错
Posted
技术标签:
【中文标题】Windows 中的多线程 - 创建函数指针数组时出错【英文标题】:Multithreading in Windows - Error in creating array of function pointers 【发布时间】: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 : '(' 【参考方案1】:我相信这条线应该是这样的:
typedef DWORD (WINAPI *t_Threadproc)(LPVOID);
即关键字WINAPI
需要在括号内。
【讨论】:
以上是关于Windows 中的多线程 - 创建函数指针数组时出错的主要内容,如果未能解决你的问题,请参考以下文章