嵌套循环的优化。。。
来源:互联网 发布:无线安全助手for mac 编辑:程序博客网 时间:2024/06/05 18:31
我写过的嵌套循环查询函数,目的是着个位置把不重复的设备名存起来,这个函数写了整整2个小时,才终于可以运行,计算机真辛苦》。。。。。。
====================原创版本,最费力起,也最容易出错
BOOL
Check_and_ADD_USB_Device()
{
int i;
int i2;
int i3;
if ( !GetUsbDeviceFileName(
(LPGUID) &GUID_CLASS_I82930_BULK,
completeDeviceName,0) )
{
// NOISY(("Failed to GetUsbDeviceFileName:%d/n", GetLastError()));
return 0;
}
else
{
TRACE("SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS/r/n");
TRACE(completeDeviceName);
TRACE("/r/n");
for(i=0;i<MAX_USB_Device+1;i++)
{
if(USBDevice_Names[i][0]=='/0') //证明此处是空的;
{
for(i2=0;i2<MAX_USB_Device+1;i2++)//检查是否跟上一个重复
{
if(strcmp(USBDevice_Names[i2],completeDeviceName)==0)
{
int report_error_time;
BOOL Gotit=0;
report_error_time=GetUSBDeviceName_Times;// =给它8次机会获得completeDeviceName
while(report_error_time||(!Gotit))
{
for(i3=0;i3<MAX_USB_Device+1;i3++)
{
if( GetUsbDeviceFileName((LPGUID) &GUID_CLASS_I82930_BULK,completeDeviceName,i3))
{
if(strcmp(USBDevice_Names[i2],completeDeviceName)==0)
continue;
else
{
Gotit=1;
break;//获得不重复的
}
}//获取成功的支线
else
{
report_error_time--;//接着获取邋completeDeviceName 7次
if(!report_error_time)
{
AfxMessageBox("Get USB DeviceFileName error over d% times!!!",GetUSBDeviceName_Times);
break;//超过次数 跳出报警
}
}//获取不成功的支线
}//end for i3
}//end while report_error_time
}//正确获得没有重复的completeDeviceName
}//换个USBDevice_Names[i2]继续比较,直到都不重复
memcpy(USBDevice_Names[i],completeDeviceName,sizeof(completeDeviceName));
break;
} //有空位的地方
}//end for i
}//最外面的IF ELSE结尾
return 1;
}//只增不减
=====================================================第一次优化把查空函数提前了
后来的改造
{
int i;
int i2;
int i3;
for(i=0;i<MAX_USB_Device+1;i++)
{
if(USBDevice_Names[i][0]=='/0')
{
GETname:
for (i3=0;i3<MAX_USB_Device+1;i3++)
{
if ( !GetUsbDeviceFileName(
(LPGUID) &GUID_CLASS_I82930_BULK,
completeDeviceName,i3) )
{
AfxMessageBox("usb不能找到名字!!");
return 0;
break;
}
else
{
for(i2=0;i2<MAX_USB_Device+1;i2++)
{
if(strcmp(USBDevice_Names[i2],completeDeviceName)==0)
{
goto GETname;
}
}
memcpy(USBDevice_Names[i],completeDeviceName,sizeof(completeDeviceName));
break;
}
}
}
if(i==8)
AfxMessageBox("最大连接数超出 !!");
}//?òμ?óD??μ?i ?-?·
return 1;
}
=====================================================================第二次优化
{
int i;
int i2;
int i3;
BOOL infor=0;
for(i=0;i<MAX_USB_Device+1;i++)
{
if(USBDevice_Names[i][0]=='/0')
{
for (i3=0;i3<MAX_USB_Device+1;i3++)
{
infor=0;
if ( !GetUsbDeviceFileName(
(LPGUID) &GUID_CLASS_I82930_BULK,
completeDeviceName,i3) )
{
AfxMessageBox("usb不能找到名字!!");
return 0;
break;
}
else
{
for(i2=0;i2<MAX_USB_Device+1;i2++)
{
if(strcmp(USBDevice_Names[i2],completeDeviceName)==0)
{
infor=1;
continue;
}
}
if(infor) continue;
memcpy(USBDevice_Names[i],completeDeviceName,sizeof(completeDeviceName));
return 1;
}
}
}
if(i==8)
AfxMessageBox("超出最大连接数!!");
}//?òμ?óD??μ?i ?-?·
============================
GetUsbDeviceFileName 函数中
....
SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
// free ( *UsbDevices );
*UsbDevices = NULL;
UsbDevices = NULL;
return hOut;
妈的一free 就乱跑,还得哥们弊掉它,直接用空指针算了!
=========================================极了,总是出错,看来再简单一些,第三次优化!!!最简单版本
{
int i;
int i2;
BOOL infor=0;
for(i=0;i<MAX_USB_Device+1;i++)
{
if(USBDevice_Names[i][0]=='/0')
{
if ( !GetUsbDeviceFileName(
(LPGUID) &GUID_CLASS_I82930_BULK,
completeDeviceName,i3) )
{
AfxMessageBox("usb没找到名字!!");
//return 0;
break;
}
else
{
check:
for(i2=0;i2<MAX_USB_Device+1;i2++)
{
if(strcmp(USBDevice_Names[i2],completeDeviceName)==0)
{
i3++;
GetUsbDeviceFileName( (LPGUID) &GUID_CLASS_I82930_BULK, completeDeviceName,i3) ;
goto check;
//infor=1;
//continue;
}
}
}
//if(infor) continue;
memcpy(USBDevice_Names[i],completeDeviceName,sizeof(completeDeviceName));
return 1;
}
if(i==8)
AfxMessageBox("超过最大连接数!!");
}//
}
- 嵌套循环的优化。。。
- ABAP 循环嵌套的优化
- 关于嵌套循环的优化问题!
- oracle嵌套循环的执行计划优化
- oracle嵌套循环的执行计划优化
- oracle嵌套循环的执行计划优化
- 2.三表联查,javafor循环嵌套的优化
- 嵌套for循环语句的性能优化
- 循环嵌套优化!!
- 嵌套 for循环优化
- 循环嵌套性能优化
- for循环嵌套 简单优化
- 嵌套For循环性能优化
- for循环嵌套 简单优化
- 试嵌套多层For循环的性能和优化方案
- C++中for循环嵌套遍历的优化方法
- smarty的嵌套循环
- 循环的嵌套
- Oracle分析函數
- Struts2 + Hibernate 分页程序实例
- 快速排序算法原理与实现(一)
- 企业过冬:十问绩效管理
- 项目概述
- 嵌套循环的优化。。。
- 六级词汇天天练(11.20)
- 各种查找和排序的定义及时间复杂度
- 内存找色
- 企业过冬:破解企业的平庸魔咒
- 编写Enterprise bean的客户端(上)
- VC 调试技术与异常(错误)处理
- Mipmap纹理技术简介
- C路历程1(原作于08年3月19日晚0点42分)