_beginthreadex创建多线程传参数问题

银冰冷月 2014-09-05 03:56:00
为什么在执行过程中,我需要创建4个线程,但是实际运行的时候有时候3个有时候两个
而且执行的readCamera函数也执行不完全,有时候打印两句话,有时候打印一句话
难道是传参数的时候有问题,我查过,说是需要new出来,我之前是直接数组声明,后来改成new,但是结果一样

#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <iostream>
using namespace std;

int cam_count=4;


typedef struct cameraInfo
{
int cam_index;
char windowName[16];
IplImage *pFrame;
};

cameraInfo *camInfo[6];

//子线程函数
unsigned int __stdcall readCamera(void* pArguments )
{
cameraInfo *info = (cameraInfo*)pArguments;
printf("线程ID号为%4d的子线程说:read Camera%d\n", GetCurrentThreadId(),info->cam_index);
printf("线程ID号为%4d的子线程说:read Camera %s\n", GetCurrentThreadId(),info->windowName);
return 0;
}

void camThreadTest()
{
const int THREAD_NUM = 6;
HANDLE handle[THREAD_NUM];
for (int i = 0; i < cam_count; i++)
{
printf("cam_count=%d.\n", i);
camInfo[i]=new cameraInfo;
sprintf(camInfo[i]->windowName,"camera%d",i);
camInfo[i]->cam_index=i;
handle[i] = (HANDLE)_beginthreadex(NULL, 0, readCamera, (void*)camInfo[i], 0, NULL);
}
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);

}
int main()
{
camThreadTest();
return 0;
}
...全文
242 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
银冰冷月 2014-09-05
  • 打赏
  • 举报
回复
引用 1 楼 zhousitiaoda 的回复:
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE); THREAD_NUM是6,但是你只启动了4个线程,数组handle里只有4个是有效的。先把WaitForMultipleObjects第一个参数改成4试试
谢谢,根据你的帮助,问题得到解决,因为初学多线程,很多方法都不是很懂,谢谢你!
银冰冷月 2014-09-05
  • 打赏
  • 举报
回复
zhousitiaoda 2014-09-05
  • 打赏
  • 举报
回复
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE); THREAD_NUM是6,但是你只启动了4个线程,数组handle里只有4个是有效的。先把WaitForMultipleObjects第一个参数改成4试试

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧