Qprocess を使用して ping を実行し、ホストがオンラインかどうかを確認しています...
問題は、Qprocess->finished シグナルから受信した終了コードが、到達可能なホストまたは到達不能なホストに ping を送信しても、常に 2 であることです。
QTimerでホストに継続的にpingしています(Qtアプリが実行されているクライアントにマウントした1つのフォルダー)...
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
1.1.1.1がpingされているか、1.1.1.11が端末でpingされているかに関係なく、行は常に出力として2,0を提供しますアプリがそれに応じて動作できるように、オンライン/オフラインのホストをシミュレートします)
どんな入力でも大きな助けになります..
ありがとう。