Linux CPU utilization: Difference between revisions

Line 166:
2.50627%
</pre>
 
=== {{libheader|Qt}} ===
==== Console Variant 1 ====
{{uses from|library|Qt|component1=QFile}}
A very basic [[Qt]]-port of the the [[#C++|C++]] implementation above.
<lang cpp>
#include <QFile>
#include <unistd.h>
 
int main(int, char *[]) {
int prevIdleTime = 0, prevTotalTime = 0;
for (QFile file("/proc/stat"); file.open(QFile::ReadOnly); file.close()) {
const QList<QByteArray> times = file.readLine().simplified().split(' ').mid(1);
const int idleTime = times.at(3).toInt();
int totalTime = 0;
foreach (const QByteArray &time, times) {
totalTime += time.toInt();
}
qInfo("%5.1f%%", (1 - (1.0*idleTime-prevIdleTime) / (totalTime-prevTotalTime)) * 100.0);
prevIdleTime = idleTime;
prevTotalTime = totalTime;
sleep(1);
}
}
</lang>
{{out}}
<pre>
31.7%
7.3%
10.3%
1.3%
4.0%
</pre>
 
==== Console Variant 2 ====
{{uses from|library|Qt|component1=QCoreApplication|component2=QObject|component3=QFile}}
An event-based [[Qt]] console implementation. Note, this version does not rely on any system-dependant headers or functions.
<lang cpp>
#include <QCoreApplication>
#include <QFile>
 
class CpuUsage : public QObject {
public:
CpuUsage() : prevIdleTime(0), prevTotalTime(0) { }
 
protected:
virtual void timerEvent(QTimerEvent *)
{
QFile file("/proc/stat");
file.open(QFile::ReadOnly);
const QList<QByteArray> times = file.readLine().simplified().split(' ').mid(1);
const int idleTime = times.at(3).toInt();
int totalTime = 0;
foreach (const QByteArray &time, times) {
totalTime += time.toInt();
}
qInfo("%5.1f%%", (1 - (1.0*idleTime-prevIdleTime) / (totalTime-prevTotalTime)) * 100.0);
prevIdleTime = idleTime;
prevTotalTime = totalTime;
}
 
private:
int prevIdleTime;
int prevTotalTime;
};
 
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
CpuUsage usage;
usage.startTimer(1000);
return app.exec();
}
</lang>
{{out}}
<pre>
31.7%
4.2%
3.5%
16.2%
2.5%
4.5%
</pre>
 
==== GUI ====
{{uses from|library|Qt|component1=QApplication|component2=QProgressDialog|component3=QFile}}
A GUI version, using the [[Qt]] framework.
<lang cpp>
#include <QApplication>
#include <QFile>
#include <QProgressDialog>
 
class CpuUsage : public QProgressDialog {
public:
CpuUsage() : prevIdleTime(0), prevTotalTime(0)
{
connect(this, &QProgressDialog::canceled, &QApplication::quit);
setLabelText(tr("CPU utilization"));
setCancelButtonText(tr("Quit"));
startTimer(500);
}
 
protected:
virtual void timerEvent(QTimerEvent *)
{
QFile file("/proc/stat");
file.open(QFile::ReadOnly);
const QList<QByteArray> times = file.readLine().simplified().split(' ').mid(1);
const int idleTime = times.at(3).toInt();
int totalTime = 0;
foreach (const QByteArray &time, times) {
totalTime += time.toInt();
}
setValue((1 - (1.0*idleTime-prevIdleTime) / (totalTime-prevTotalTime)) * 100.0);
prevIdleTime = idleTime;
prevTotalTime = totalTime;
}
 
private:
int prevIdleTime;
int prevTotalTime;
};
 
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
CpuUsage usage;
usage.show();
return app.exec();
}
</lang>
 
=={{header|Fortran}}==
57

edits