"i++"便不对,要用专门的api函数使i安全地加1,请看VC6编程内幕第4或5版或《深入浅出MFC》
解决方案 »
- 如果我希望程序一开始就设置SetTimer,那我应该把它放在什么地方?
- MFC中,选择Combo Box列表不同的下拉项时在编辑框显示不同的内容
- DLL中调用OCX
- 如何从socket 中取得远程主机名
- 如果有上百万条纪录,如何进行高效的查询处理,请高手帮忙!
- 使用COleDateTimeSpan的一个郁闷问题
- 怎样编写在浏览器提示安装的程序?
- vc下使用ado在win98下怎么不能运行?请高手指点!来着有分
- 参与者有分。。。欢迎高手中的高手。。。
- 关于无文档和视类支持的dc环境准备问题
- 各位谁知道股票分析软件中的那些画线工具的算法?譬如黄金分割线,通道,甘氏线等?分数大大的。。
- 1+1=多少?
to sol:应该可以啊,i压入了线程堆栈啊
不过不谈这个,把它看成类C++代码,我想输出结果不会唯一。
1。创建挂起的线程,线程函数内用本地变量保存i, print("%d",localvar),最后再激活它们(1-100不会按顺序打的)
2。用数组保存i值,再将相应的数组元素传到相应线程
3。如果还不满意,那,那……, 只有给线程加开关让它们一个个执行了,这就不叫并行了嘛!
{
printf("%d ",i);
}
main()
{
HANDLE hThread[101];
DWORD dwThreadID;
int i;
hThread[0]=CreateThread(NULL,0,proc,(LPVOID)0,0,&dwThreadID);
for(i=1; i<=100; i++)
{
waitforsingleobject(hThread[i-1],INFINITE);
hThread[0]=CreateThread(NULL,0,proc,(LPVOID)0,0,&dwThreadID);
}
} 怎么样????
{
waitforsingleobject(hThread[i-1],INFINITE);
hThread[0]=CreateThread(NULL,0,proc,(LPVOID)0,0,&dwThreadID);
}
应该是:
for(i=1; i<=100; i++)
{
waitforsingleobject(hThread[i-1],INFINITE);
hThread[i]=CreateThread(NULL,0,proc,(LPVOID)i,0,&dwThreadID);
}
用::InterlockedIncrement((long*)&i);
替代
i++;
试一试?