c - Windows 中的多线程 - 创建函数指针数组时出错

标签 c windows multithreading winapi

我是多线程 (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 iam 在下一行中出现错误 错误 C2440:“正在初始化”:无法从“DWORD (__stdcall *)(LPVOID)”转换为“t_Threadproc”

最佳答案

我认为这条线应该是这样的:

typedef DWORD (WINAPI *t_Threadproc)(LPVOID);

即关键字 WINAPI 需要放在括号内。

关于c - Windows 中的多线程 - 创建函数指针数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22223672/

相关文章:

windows - 旺盛的Ctags无法在Windows上正确排除文件

.net - 异步Thread.Sleep()

c - C 语言沙漏星形图案程序

c - 在c中修改char指针的值会产生段错误

检查套接字编程中的地址族

python - 如何确定是否需要提升权限才能在不进行故障检查的情况下启动进程

C 中的 Connect-N 游戏检查获胜功能不起作用

windows - Cygwin 安装 : Missing/usr/bin and/usr/local/sbin directories

c# - .Net Garbage 会收集一个未被引用但有一个正在工作的线程的对象吗?

c - 多线程代码的难以理解的结果