1,使用IP地址數據庫。本地查詢
這種方式的優點是查詢速度最快,不依賴外部網站。
缺點是:要寫壹定的數據庫查詢代碼,而且如果妳的數據庫不是很新,有些IP查詢結果會不正確。
(如果有需要,可以在這裏留言。蝦米可以提供妳能找到的最新的IP地址庫。)
2、使用WebService查詢。
這是最好的網絡服務之壹。
/zh_cn/web_services_item.aspx?id=56647553443555386D2F4D3D
缺點是:要編寫壹定的WebService查詢代碼。而且查詢的結果是XML的形式,需要進壹步分析。
3.調用壹些查詢網站的代碼,比如/
缺點是會返回相當多不相關的代碼,很難解析出自己想要的東西。
4.撥打氣動隔膜泵網站鏈接直接查詢。
例如
/ip.aspx?ip=202.105.19.49
網站會直接返回查詢結果,比如“廣東省佛山市三水區”
不會有任何噪音幹擾。
Win32 API不提供氣動隔膜泵函數直接獲取CPU占用率,但是可以通過提供GetProcessTimes()函數獲取壹個進程占用的CPU時間。通過與實際時間的流逝進行對比,可以得到壹個進程占用CPU的比率。
這裏是完整的C++代碼。
//獲取當前進程的CPU占用率。
類別GetCPUPercentage
{
私人:
臨界_截面cs;//多線程同步的臨界區變量
手柄高清;//空閑進程的句柄
DWORD t 1;//時間戳
int百分比;//上次計算的CPU利用率
_ _ int64 oldp
_ _ int64 FileTimeToInt64(常量FILETIME & amp時間);
int GetTime(_ _ int 64 & amp;proc);//獲取進程占用的CPU時間
公共:
GetCPUPercentage();
~ GetCPUPercentage();
int Get();//獲取CPU占用率
};
GetCPUPercentage::GetCPUPercentage()
{
InitializeCriticalSection(& amp;cs);//初始化線程臨界區變量
百分比= 0;//初始入住率
DWORD PID = GetCurrentProcessId();//獲取當前進程id
HD = open PROCESS(PROCESS _ QUERY _ INFORMATION,FALSE,PID);//通過id獲取進程的句柄。
if( hd==NULL ){
返回;
}
//獲取初始值。
GetTime(oldp);
t 1 = GetTickCount();
}
GetCPUPercentage::~ GetCPUPercentage()
{
如果(高清!=NULL ){
CloseHandle(高清);
}
DeleteCriticalSection(& amp;cs);
}
//時間格式轉換
_ _ int 64 GetCPUPercentage::FILETIME point 64(const FILETIME & amp;時間)
{
ULARGE _整數TT;
tt。LowPart = time.dwLowDateTime
tt。HighPart = time.dwHighDateTime
返回(tt。quad part);
}
//獲取進程占用的CPU時間
int GetCPUPercentage::GetTime(_ _ int 64 & amp;過程)
{
FILETIME創建;
FILETIME退出;
FILETIME ker//內核運行時間
FILETIME用戶;//用戶占用時間
FILETIME now
如果(!GetProcessTimes(高清& amp創建& amp退出& ampker & amp;用戶)){
return(-1);
}
proc =(filetime point 64(ker)+filetime point 64(user))/10000;
return(0);
}
//轉換
int GetCPUPercentage::Get()
{
if( hd==NULL)
return(0);
enter critical section(& amp;cs);
DWORD T2 = GetTickCount();
DWORD dt = T2-t 1;
if(dt & gt;139 ){ //毫秒。使用相對較小的時間片作為計算單位,可以修改該值。
_ _ int64 proc
GetTime(proc);
percent =((proc-oldp)* 100)/dt;
t 1 = T2;
oldp = proc
}
LeaveCriticalSection(& amp;cs);
回報(百分比);
}
//定義壹個全局變量
GetCPUPercentage _ cpu
//以下是用c++ builder編寫的測試示例:
// -
//使用時鐘連續顯示當前的CPU利用率。
void _ _ fast call t form 1::timer 1 timer(to object * Sender)
{/
label 1->;Caption = _cpu。get();
}
// -
//獲取另壹個按鈕
LRESULT WINAPI TestThread(長lParam)
{
int n = lParam
for(int I = 0;我& ltn;i++){
form 1->;Label2->caption = I;
睡眠(12);
}
return(0);
}
//單擊此按鈕將創建壹些線程來保持CPU忙碌。
void _ _ fast call t form 1::button 1 click(to object * Sender)
{
int n = atoi(edit 1->;text . c _ str());
DWORD dwThreadid
創建線程(空