我写了如下程序,运行怎么没有反应,难道FOR循环有时间限制?
double GetMax(int *array, DWORD size)
{
double maxG = 0, currentG;
for(int h1=0; h1<360; h1++)
{
for(int h2=0; h2>h1; h2--)
{
currentG = 0;
for(DWORD i=0; i<size; i++)
{
if(h1 < array[i] && h2 > array[i])
{
currentG += array[i];
}
}
if(currentG > maxG)
{
maxG = currentG;
}
}
}
return maxG;
}调用如上函数,当数组的长度为1024*1024,程序就没有响应了!
哪位大虾知道是怎么回事?
double GetMax(int *array, DWORD size)
{
double maxG = 0, currentG;
for(int h1=0; h1<360; h1++)
{
for(int h2=0; h2>h1; h2--)
{
currentG = 0;
for(DWORD i=0; i<size; i++)
{
if(h1 < array[i] && h2 > array[i])
{
currentG += array[i];
}
}
if(currentG > maxG)
{
maxG = currentG;
}
}
}
return maxG;
}调用如上函数,当数组的长度为1024*1024,程序就没有响应了!
哪位大虾知道是怎么回事?
如果需要的时间太长,最好弄在工作线程里。代码忠实的执行着你的意图,不要说是for的bug,要说bug,那只能怪你自己了。
我奇怪的就是这个h2会大于h1吗?
相信for语句经历了这么多风风雨雨,坚定程序不容置疑,所以只有一个可能,你的程序有问题,
解决方法:重新调整思路
for(int h2=360; h2 >h1; h2--)简化一下,就是:
int count=0;
for(double i=0; i<360*360*1024*1024; i++)
{
count++;
if(count > 10000) count = 0;
}上述程序一运行就死在那里了,没有相应,不信大家可以试试.
本人电脑:CPU P4 2.0G, RAM 512M,应该不算很差吧??WINDOWS为事件所分配的时间片达到了极限??
hoho
1G = 2^30,没错吧?
2^38 = 2^30 * 2^8 = 256G, 没错吧?
2G的CPU,一秒钟运算2G次,没错吧?
总共也就需要128秒,而已!!!早上运行,中午再看看?????请诸位先想清楚再说话,不是我脑子进水,而是你们根本就没有做过复杂的问题!!
总共也就需要128秒,而已!!!-_-//
这个……
你的CPU一秒钟只能做2G次运算,而不是你所想的2G次循环
而且你的操作系统还要把这2G次分给其它进程,又不是独占式
请诸位先想清楚再说话,不是我脑子进水,而是你们根本就没有做过复杂的问题!!
-------------------------------
LZ的什么理论呀?
反汇编一下你的循环体看看有多少条汇编指令噢~~
一条汇编指令执行需要消耗好几个时钟周期的.
另外你用的系统又不是你独占CPU的,是分时的~~
XP一般有27个进程,线程数却有300个之多,假设均分的情况,CPU运行1秒,你的程序也就实际运行了1/300秒而已..(这里还没考虑优先级的问题)
不是我们没做过那么复杂的问题,是你思想太单纯,写程序是要考虑好多东西的.LZ可以把循环缩小一点,然后放一个计时器测一下时间就明白了..额~~