00001 #include "LCDCpuSensor.h"
00002 #include "LCDUtils.h"
00003
00004 #include <fstream>
00005 #include <sys/types.h>
00006 #include <time.h>
00007 #include <unistd.h>
00008 #include <string>
00009
00010 using namespace std;
00011
00012 LCDCpuSensor::LCDCpuSensor(string cpuName)
00013 {
00014 _cpuName = "cpu";
00015 _userTicks = 0;
00016 _sysTicks = 0;
00017 _niceTicks = 0;
00018 _idleTicks = 0;
00019 }
00020
00021 void LCDCpuSensor::waitForChange()
00022 {
00023 sleep(1);
00024 }
00025
00026 string LCDCpuSensor::getCurrentValue()
00027 {
00028 long uTicks, sTicks, nTicks, iTicks;
00029
00030 getTicks(uTicks, sTicks, nTicks, iTicks);
00031
00032 const long totalTicks = ((uTicks - _userTicks) +
00033 (sTicks - _sysTicks) +
00034 (nTicks - _niceTicks) +
00035 (iTicks - _idleTicks));
00036
00037 int load = (totalTicks == 0) ? 0 : (int) ( 100.0 * ( (uTicks+sTicks+nTicks) - (_userTicks+_sysTicks+_niceTicks))/( totalTicks+0.001) + 0.5 );
00038
00039 _userTicks = uTicks;
00040 _sysTicks = sTicks;
00041 _niceTicks = nTicks;
00042 _idleTicks = iTicks;
00043
00044 return intToString(load);
00045 }
00046
00047 void LCDCpuSensor::getTicks (long &u,long &s,long &n,long &i)
00048 {
00049 fstream file;
00050 string item = "";
00051
00052 file.open("/proc/stat", ios::in);
00053
00054 if (file.is_open())
00055 {
00056 while (item != _cpuName)
00057 {
00058 file >> item;
00059 }
00060 file >> u >> s >> n >> i;
00061
00062 file.close();
00063 }
00064 else
00065 {
00066 u = 0;
00067 s = 0;
00068 n = 0;
00069 i = 0;
00070 }
00071
00072 }