void Func()
{
for(int i=1;i<=5;i++)
{
int buff=i;
CreateThread(NULL,0,Thread,(LPVOID)&buff,0,&ThreadId);
}
}请问 这段有什么问题没?(所用变量都以声明) 是不是 声明了 5个int 型的变量?还是每次循环 buff的值都被覆盖?在就是每次启动线程 传进去的参数 分别 是 1,2,3,4,5吗?
{
for(int i=1;i<=5;i++)
{
int buff=i;
CreateThread(NULL,0,Thread,(LPVOID)&buff,0,&ThreadId);
}
}请问 这段有什么问题没?(所用变量都以声明) 是不是 声明了 5个int 型的变量?还是每次循环 buff的值都被覆盖?在就是每次启动线程 传进去的参数 分别 是 1,2,3,4,5吗?
解决方案 »
- 关于VARIANT结构互转的问题
- 点击任务栏图标时会触发什么消息,怎么才能在对话框的类里面接收到这个消息呢?
- VC/MFC 如何实现对文件夹里的文件进行剪切操作
- 对于在一个线程中 SetTimer中设置的 TimeProc的回调函数 有没有同步的必要 谢谢
- 在VC里,this->后面不能出现他全部的成员函数.怎么办?
- 关于内存映射文件的大小?
- 请问vc能装在多大的图标??
- 如何创建一个透明的toolbar?
- VC自定消息参数的问题
- 第一次来csdn,送分当作见面礼,来者有份(分)!快快!!!
- c:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(4498) : error C2660: 'VarCmp' : function does not take 3 par
- ATL编程的时候如何打开一个应用程序并与之交互(获得一些这个应用程序运行的情况)。
buff是返回的值,每次都会被改变
传进去的参数分别是1,2,3,4,5。
{
int buff=i;
CreateThread(NULL,0,Thread,(LPVOID)&buff,0,&ThreadId);
}上面的代码有潜在的问题.因为buff的生存周期是在一个循环内,而你的线程内如果要使用buff值的话,必须假设线程在上面一次循环退出前将buff值还原.
然而操作系统的时间片是以线程为单位的,线程的执行顺序具有不确定性,上面的代码完全有可能在i=5执行完后,第一个创建的线程才开始工作,而此时第一个线程所传入的buff已经没有意义.