AfxBeginThread 创建多个线程时传到的参数值和线程执行函数里监测到的不一致

AfxBeginThread 创建多个线程时传入的参数值和线程执行函数里监测到的不一致
用AfxBeginThread 创建线程函数,类似
AfxBeginThread(connectThread,(LPVOID)(&param)), 有时候创建的线程函数不能立即执行,等到执行后,发现传入的参数不是创建时传的参数,比如创建5个线程,传入递增的id number,执行时id为0的线程函数没有立即执行,id为1,2,3,4的线程执行后,监测到最后一个线程,但id确不是0而是4,也有中间线程没有立即执行的情况,基本上如果有某些线程不能立即执行,id=4的线程会执行多次,这是为什么呢?
------解决方案--------------------
你创建线程的试试是不是给线程传递都是同一个变量,类似这样的
param arg; // 成员变量

// 初始化arg在某个初始化函数中

// 创建线程
for(int i = 0; i != 4; ++i)
{
 arg.i = i;
 arg.xx = xx;
 AfxBeginThread(ThreadProc, (LPVOID)&arg);
}

你该不会是这样写的吧。如果是的话,请修改成这样的
for(int  i = 0; i != 4; ++i)
{
 param * pArg = new param;
 pArg->i = i;
 pArg->xx = xx;
 AfxBeginThread(ThreadProc, (LPVOID)&arg);
}

至于第一种做饭为啥会出现你说的这种问题,应该不用再解释了吧。
------解决方案--------------------
楼主,你首先要清楚cpu的运行原理,一个时间片只能有一个线程在运行,而且每个线程运行是抢占资源的,所以你先创建的线程不一定先运行,而且每个线程运行都是交叉的,如果你是通过断点方式查看变量值可能会不正确,建议用TRACE宏输出下看看