Van erre is "szebb" Qt-s megoldás:int getPID(QString processName)
{
QDirIterator iterator("/proc");
QString s;
QString name;
QFile f;
while (iterator.hasNext())
{
s = iterator.next();
f.setFileName(s + "/comm");
if (f.open(QIODevice::ReadOnly))
{
name = f.readLine();
f.close();
if (name.contains(processName))
{
return s.split("/")[2].toInt();
}
}
}
return -1;
} A tied persze gyorsabb, mert az csak a libc-re támaszkodik.kemi242@linux-93id:~/getpid/bin> time ./getpid_ps
real 1m21.628s
user 0m29.981s
sys 0m50.390s
kemi242@linux-93id:~/getpid/bin> time ./getpid_qt
real 0m13.016s
user 0m5.858s
sys 0m7.153s
kemi242@linux-93id:~/getpid/bin> time ./getpid_tch
real 0m2.815s
user 0m0.354s
sys 0m2.459s
@TCH:Dehogynem, hiszen a te overloadolt operátorod is ugyanazt csinálja: meghívja a konverter metódust, de azt te is csinálhatod: cout << s1.toStdString() << s2.toStdString() << s3.toStdString(); Lehet úgy is, de ha van operátor kevesebbet kell gépelni, olvashatóbb a kód, ha meg elérod az inline kulcsszót ugyanerre fordul, vagyis semmivel nem lesz lassabb. |