La forma más sencilla de obtener la dirección IP a través de un programa
A veces es necesario mostrar la dirección IP de la otra parte y su ubicación en una aplicación de sitio web. En términos generales, existen varios métodos, como se detalla a continuación.
1. Utilizar la base de datos de direcciones IP. Consulta local
La ventaja de este método es que la velocidad de consulta es la más rápida y no depende de sitios web externos.
La desventaja es que necesita escribir cierto código de consulta de la base de datos y, si su base de datos no es muy nueva, los resultados de la consulta de algunas IP serán incorrectos.
(Si es necesario, puede dejar un mensaje aquí, Daxiami puede proporcionar la última biblioteca de direcciones IP que se puede encontrar)
2, utilice la consulta de servicio web.
Aquí está el mejor servicio web
/zh_cn/web_services_item.aspx?id=56647553443555386D2F4D3D
La desventaja es que necesita escribir cierto código de consulta de servicio web. Además, los resultados de la consulta están en formato XML y requieren un análisis más detallado.
3. Llame a algunos códigos para consultar el sitio web, como //
La desventaja es que devolverá una gran cantidad de código irrelevante, lo que dificultará el análisis de lo que desea.
4. Llame al enlace del sitio web de la bomba de diafragma neumática para realizar una consulta directamente
Por ejemplo
/ip.aspx?ip=202.105.19.49
El sitio web devolverá directamente los resultados de la consulta, como "distrito de Sanshui, ciudad de Foshan, provincia de Guangdong"
No habrá interferencia de ninguna información diversa
La API de win32 no proporciona acceso directo al uso de la CPU. Función de bomba de diafragma neumática, pero la función GetProcessTimes() se proporciona para obtener el tiempo de CPU ocupado por el proceso. Al compararlo con el paso del tiempo real, puede obtener la proporción de la CPU ocupada por el proceso. un determinado proceso.
El siguiente es el código C completo.
//Obtener el uso de CPU del proceso actual
clase GetCPUPercentage
{
privado:
CRITICAL_SECTION cs; // Variable de sección crítica para sincronización multiproceso
HANDLE hd; // Identificador del proceso inactivo
DWORD t1; // Marca de tiempo
int percent; // El último uso de CPU calculado
__int64 oldp;
__int64 FileTimeToInt64(const FILETIMEamp; time);
int GetTime(__int64amp; proc ); // Obtener el tiempo de CPU ocupado por el proceso
public:
GetCPUPercentage();
~GetCPUPercentage();
int Get(); // Obtener el uso de CPU
};
GetCPUPercentage::GetCPUPercentage()
{
InitializeCriticalSection(amp ;cs); // Inicializar variables de sección crítica del hilo
percent = 0; // Tasa de ocupación inicial
DWORD pid = GetCurrentProcessId() // Obtener la identificación del proceso actual
p>hd = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); // Obtenga el identificador del proceso a través de id
if( hd==NULL ){
return;
p>}
//Obtener el valor en el momento inicial
GetTime(oldp);
t1 = GetTickCount() ;
}
GetCPUPercentage::~GetCPUPercentage()
{
if( hd!=NULL ){
CloseHandle(hd );
}
DeleteCriticalSection(amp; cs);
}
// Conversión de formato de hora
__int64 GetCPUPercentage::FileTimeToInt64(const FILETIMEamp; time)
{
ULARGE_INTEGER tt;
tt.LowPart = time.dwLowDateTime ;
tt.HighPart = time.dwHighDateTime;
return(tt.QuadPart);
}
// Obtener la CPU tiempo ocupado por el proceso
int GetCPUPercentage::GetTime(__int64amp; proc)
{
FILETIME crear;
FILETIME salir;
FILETIME ker; // Tiempo del kernel ocupado
FILETI
ME usuario; //Tiempo de ocupación del usuario
FILETIME ahora;
if( !GetProcessTimes(hd, create, exit, ker, user) ){
return (-1);
}
proc = (FileTimeToInt64(ker) FileTimeToInt64(user))/10000;
return(0);
}
//Convertir
int GetCPUPercentage::Get()
{
if( hd==NULL )
return(0);
EnterCriticalSection(amp;cs);
DWORD t2 = GetTickCount();
DWORD dt; = t2 - t1;
if( dtgt; 139 ){ // Número de milisegundos.
Utilice un intervalo de tiempo relativamente pequeño como unidad de cálculo, este valor se puede modificar
__int64 proc;
GetTime(proc);
percent = ((proc - oldp)*100)/dt;
t1 = t2;
oldp = proc;
}
LeaveCriticalSection(amp; cs );
return(percent);
}
//Definir una variable global
GetCPUPercentage _cpu;
// El siguiente es un ejemplo de prueba escrito en C Bulider:
// ------------------------- -
// Usando un reloj para mostrar continuamente el uso actual de la CPU
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{/ p >
Label1-gt;Caption = _cpu.Get();
}
//---------------- - -------------------------------------------------- --------
// Obtener otro botón
LRESULT WINAPI TestThread(LONG lParam)
{
int n = lParam;
for(int i=0; ilt; n; i){
Form1-gt; Label2-gt; >Sleep(12);
}
return(0);
}
// Al hacer clic en este botón se crearán algunos hilos. para hacer que la CPU esté más ocupada
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = atoi(Edit1-gt ;Text.c_str ());
DWORD dwThreadid;
CreateThread(NULL