【问题标题】:Multithreading in Windows - Error in creating array of function pointersWindows 中的多线程 - 创建函数指针数组时出错
【发布时间】: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


【解决方案1】:

我相信这条线应该是这样的:

typedef DWORD (WINAPI *t_Threadproc)(LPVOID);

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

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 2021-07-02
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多