您好,登錄后才能下訂單哦!
這篇文章主要介紹“Qt運(yùn)行時(shí)間記錄類怎么使用”,在日常操作中,相信很多人在Qt運(yùn)行時(shí)間記錄類怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Qt運(yùn)行時(shí)間記錄類怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
在早期開發(fā)的軟件中,尤其是初學(xué)者入門者寫的軟件,軟件運(yùn)行久了,難免遇到意外崩潰的時(shí)候,可是大部分的運(yùn)行設(shè)備可能在現(xiàn)場客戶那,需要記住每一次從軟件啟動(dòng)后到軟件意外關(guān)閉前的運(yùn)行時(shí)間,需要記錄的信息包括:編號(hào)+開始時(shí)間+結(jié)束時(shí)間+已運(yùn)行時(shí)間,每次完整的運(yùn)行過程只產(chǎn)生一條記錄,每次運(yùn)行時(shí)間改變以后更新當(dāng)前這條記錄即可。這樣就可以確切的了解到軟件在現(xiàn)場的真實(shí)運(yùn)行情況是否糟糕,如果沒有這個(gè)記錄(當(dāng)然可以選擇記錄存儲(chǔ)到數(shù)據(jù)庫),程序又重啟恢復(fù)了,也不知道到底每次運(yùn)行了多久,從幾點(diǎn)到幾點(diǎn)。為了寫的簡單點(diǎn),不干擾原有的數(shù)據(jù)庫文件,我一般選擇輸出到文本文件。
主要功能:
可以啟動(dòng)和停止服務(wù),在需要的時(shí)候啟動(dòng)。
可以指定日志文件存放目錄。
可以指定時(shí)間日志輸出間隔。
可以單獨(dú)追加一條記錄到日志文件。
日志為文本格式,清晰明了。
void SaveRunTime::getDiffValue(const QDateTime &startTime, const QDateTime &endTime, int &day, int &hour, int &minute) { qint64 sec = startTime.secsTo(endTime); day = hour = minute = 0; int seconds = 0; while (sec > 0) { seconds++; if (seconds == 60) { minute++; seconds = 0; } if (minute == 60) { hour++; minute = 0; } if (hour == 24) { day++; hour = 0; } sec--; } } void SaveRunTime::initLog() { //判斷當(dāng)前年份的記事本文件是否存在,不存在則新建并且寫入標(biāo)題 //存在則自動(dòng)讀取最后一行的id號(hào) 記事本文件格式內(nèi)容 //幢號(hào) 開始時(shí)間 結(jié)束時(shí)間 已運(yùn)行時(shí)間 //1 2016-01-01 12:33:33 2016-02-05 12:12:12 day: 0 hour: 0 minute: 0 logFile = QString("%1/%2_runtime_%3.txt").arg(path).arg(name).arg(QDate::currentDate().year()); QFile file(logFile); if (file.size() == 0) { if (file.open(QFile::WriteOnly | QFile::Text)) { QString strID = QString("%1t").arg("編號(hào)"); QString strStartTime = QString("%1tt").arg("開始時(shí)間"); QString strEndTime = QString("%1tt").arg("結(jié)束時(shí)間"); QString strRunTime = QString("%1").arg("已運(yùn)行時(shí)間"); QString line = strID + strStartTime + strEndTime + strRunTime; QTextStream stream(&file); stream << line << NEWLINE; file.close(); lastID = 0; } } else { if (file.open(QFile::ReadOnly)) { QString lastLine; while (!file.atEnd()) { lastLine = file.readLine(); } file.close(); QStringList list = lastLine.split("t"); lastID = list.at(0).toInt(); } } lastID++; } void SaveRunTime::appendLog() { logFile = QString("%1/%2_runtime_%3.txt").arg(path).arg(name).arg(QDate::currentDate().year()); QFile file(logFile); //寫入當(dāng)前首次運(yùn)行時(shí)間 if (file.open(QFile::WriteOnly | QFile::Append | QFile::Text)) { QString strID = QString("%1t").arg(lastID); QString strStartTime = QString("%1t").arg(startTime.toString("yyyy-MM-dd HH:mm:ss")); QString strEndTime = QString("%1t").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")); int day, hour, minute; getDiffValue(startTime, QDateTime::currentDateTime(), day, hour, minute); QString strRunTime = QString("%1 天 %2 時(shí) %3 分").arg(day).arg(hour).arg(minute); QString line = strID + strStartTime + strEndTime + strRunTime; QTextStream stream(&file); stream << line << NEWLINE; file.close(); } } void SaveRunTime::saveLog() { //每次保存都是將之前的所有文本讀取出來,然后替換最后一行即可 logFile = QString("%1/%2_runtime_%3.txt").arg(path).arg(name).arg(QDate::currentDate().year()); QFile file(logFile); //如果日志文件不存在,則初始化一個(gè)日志文件 if (file.size() == 0) { initLog(); appendLog(); return; } if (file.open(QFile::ReadWrite)) { //一行行讀取到鏈表 QStringList content; while (!file.atEnd()) { content.append(file.readLine()); } //重新清空文件 file.resize(0); //如果行數(shù)小于2則返回 if (content.count() < 2) { file.close(); return; } QString lastLine = content.last(); QStringList list = lastLine.split("t"); //計(jì)算已運(yùn)行時(shí)間 int day, hour, minute; getDiffValue(startTime, QDateTime::currentDateTime(), day, hour, minute); QString strRunTime = QString("%1 天 %2 時(shí) %3 分").arg(day).arg(hour).arg(minute); //重新拼接最后一行 list[2] = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"); list[3] = strRunTime; lastLine = list.join("t"); //重新替換最后一行并寫入新的數(shù)據(jù) content[content.count() - 1] = lastLine; QTextStream stream(&file); stream << content.join("") << NEWLINE; file.close(); } }
到此,關(guān)于“Qt運(yùn)行時(shí)間記錄類怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。