我正在使用Qprocess执行ping来检查主机是否在线...
问题是,无论我ping的是可达主机还是不可达主机,我从Qprocess->finished信号收到的退出代码总是2。
我不断地在QTimer中连接到一个主机(我已经在运行Qt应用的客户端安装了这个文件夹)……
当我在连接到QProcess->finished信号的插槽中捕获到ping返回的退出代码时。我总是收到退出代码为2..
我不能使用直接系统调用通过系统( ping ),因为它挂起我的应用程序时,ping是活动的…我希望它是异步的,所以我切换到QProcess...
以下是代码片段:
//Pinging function called inside a timer with timout 1000
QString exec="ping";
QStringList params;
if(!dBool)
{
//params << "-c1 1.1.1.11 -i1 -w1;echo $?";
params <<" 1.1.1.11 -i 1 -w 1 -c 1";//wont ping
cout<<"\n\npinging 11 ie wont ping";
}
else
{
//params << "-c1 1.1.1.1 -i1 -w1;echo $?";
params <<" 1.1.1.1 -i 1 -w 1 -c 1";//will ping
cout<<"\n\npinging 1 ie will ping";
}
ping->start(exec,params);
// the slot that connects with QProcess->finished signal
void QgisApp::pingFinished( int exitCode, QProcess::ExitStatus exitStatus )
{
cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus;//always 2,0!!
if(exitCode==0)
//if(dBool)
{
connectivity=true;
cout<<"\n\nONLINE";
}
else
{
connectivity=false;
cout<<"\n\nOFFLINE";
}
} 这个
cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus无论是line 1.1.1.1还是line 1.1.1.11,line总是给出2,0作为输出。1.1.1.1可line,1.1.1.11不可line(我通过在按键事件上设置的dBool标志切换bw ips,以模拟在线/离线主机,以便我的应用程序可以相应地运行)
任何输入都会有很大的帮助。
谢谢。
发布于 2009-06-27 08:57:55
我认为依赖ping.exe退出代码是一种糟糕的做法,因为它没有文档记录。此外,众所周知,在不同版本的Windows中,退出代码是不一致的。
您可以:
编辑:
我不知道你正在使用Linux (下一次在你的问题中提到它可能更明智)…
在将参数发送到ping时尝试执行以下操作:
params << "1.1.1.11" << "-i" << "1" << "-w" << "1" <<"-c" <<"1";而不是一根大绳子。
发布于 2014-06-14 14:38:54
没有一种很好的跨平台方法可以做到这一点。但是您可以使用特定于平台的方式。您可以使用以下命令在Windows和Linux上执行ping操作:
#if defined(WIN32)
QString parameter = "-n 1";
#else
QString parameter = "-c 1";
#endif
int exitCode = QProcess::execute("ping", QStringList() << parameter << "1.1.1.11");
if (exitCode==0)
{
// it's alive
} else
{
// it's dead
}发布于 2009-12-23 05:16:59
您可以使用ping->execute (返回int)代替ping->start。这对我很有效!
符拉迪约克
https://stackoverflow.com/questions/1052411
复制相似问题