gpt4 book ai didi

c - 无法使用for循环创建多个线程

转载 作者:可可西里 更新时间:2023-11-01 10:06:59 27 4
gpt4 key购买 nike

我正在尝试使用 for 循环创建 3 个线程。以下是我的代码片段:

DWORD WINAPI ThreadProc0(LPVOID param)
{
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID param)
{
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID param)
{
return 0;
}

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
DWORD threadId = 0;
int max_number=1;
//Start the threads
typedef DWORD (WINAPI * THREADPROCFN)(LPVOID lpParameter);
THREADPROCFN function[3] = {ThreadProc0,ThreadProc1,ThreadProc2} ;
for (int i = 0; i < max_number; i++)
{
CreateThread( NULL,
0,
(LPTHREAD_START_ROUTINE)&function[i],
(LPVOID) i,
0,
NULL
);
}
}

代码编译成功,执行时报错solution.exe已停止运行。当我调试代码时,出现以下错误:

Solution.exe 中 0x0034fd00 处的未处理异常:0xC0000005:访问冲突。

等待帮助。

最佳答案

您可能需要 function[i](指向线程启动例程的第 i 函数指针)而不是 &function[i](指向线程启动例程的 i 函数指针)。

   typedef DWORD (WINAPI * THREADPROCFN)(LPVOID lpParameter);
THREADPROCFN function[3] = {ThreadProc0,ThreadProc1,ThreadProc2} ;

for (int i = 0; i < max_number; i++)
{
CreateThread( NULL,
0,
// v Here!
(LPTHREAD_START_ROUTINE)&function[i],
(LPVOID) i,
0,
NULL
);
}

我对 C++ 的熟悉程度不如以前,我认为在将转换更改为 LPTHREAD_START_ROUTINE 之后会变得多余。

关于c - 无法使用for循环创建多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16413853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com