运行平与Qprocess,退出的代码一直2.如果主机到达或者不
题
我使用Qprocess执行平检查主要在线或不...
问题是,退出的代码,我收到从Qprocess->完成信号总是2无论如果我ping一到达东道或无法到达的。。
我连续ping在QTimer主机(其一个文件夹我已经安装在客户那里的脱的应用程序正在运行)...
当我抓住出口码作为返回的平在一个槽中连接到QProcess->完成信号..我总是收到退出的代码为2..
我不能直接使用的系统,通过系统(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
线总是给2,0作为输出无论如果1.1.1.1的是ping或1.1.1.11是ping 在终端1.1.1.1的是可ping和1.1.1.11不是(i开关bw ips通过dBool标记上设置的按键事件来模拟在线主所以我应用程序可以相应的行为)
任何投入将是一个很大的帮助。。
谢谢。
解决方案
我认为这是一个不好的做法,依靠ping.exe 出口码,因为它的无证。此外,它已经知道,在不同版本的Windows退出的代码不一致。
你可以:
- 实现自己的平。有很多免费的实施有,例如 此 (第一一个搜索时,"平。c"谷歌).
- 分析ping.exe 输出和确定如果ping是成功的。
编辑:
没想到你的工作与Linux(下来的时候它可能是比较明智的提到它,在你的问题)...
试试这个时发送参平:
params << "1.1.1.11" << "-i" << "1" << "-w" << "1" <<"-c" <<"1";
而不是一个大串。
其他提示
有没有做一个很好的跨平台的方式。但是你可以使用平台的具体方式。您可以在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
}
可以使用刘炳章>执行(返程INT)代替刘炳章>启动。 这对我的作品!
Vladiyork
不隶属于 StackOverflow