資源簡介
設計并實現Unix的"time”命令。"mytime”命令通過命令行參數接受要運行的程序,創建一個獨立的進程來運行該程序,并記錄程序運行的時間。
在Windows下實現:
使用CreateProcess()來創建進程
使用WaitForSingleObject()在"mytime”命令和新創建的進程之間同步
調用GetSystemTime()來獲取時間
在Linux下實現:
使用fork()/exec()來創建進程運行程序
使用wait()等待新創建的進程結束
調用gettimeofday()來獲取時間
mytime的用法:
$ mytime.exe program1
$ mytime.exe program2 t
t為時間參數
顯示結果: **小時**分**秒**毫秒**微秒

代碼片段和文件信息
#include
#include
#include
#include
#include
using?namespace?std;
int?main(int?argc?char?*argv[])
{
//STARTUPINFO?si;?
STARTUPINFO?si?=?{?sizeof(si)?};?????????//c?b?成員設置為該結構的大小
//memset(&si?0?sizeof(STARTUPINFO));?
si.cb?=?sizeof(STARTUPINFO);?????????????//擴展該結構?cb初始化
si.dwFlags?=?STARTF_USESHOWWINDOW;?
si.wShowWindow?=?SW_SHOW;?
PROCESS_INFORMATION?pi;??????????????????//該結構返回有關新進程及其主線程的信息
SYSTEMTIME?startend;
if(argc==1)
{
printf(“ERROR!\n“);
????
}
else
{
string?name=(string)argv[1];
//string?name=“C:\\Users\\Cathy\\Documents\\Visual?Studio?2012\\Projects\\text1\\Debug\\text1.exe“;
????TCHAR?NAME[MAX_PATH];
????copy(name.begin()name.end()NAME);
????NAME[name.size()]=0;
TCHAR?LINE[MAX_PATH];
string?line;
for(int?i=2;i {
line+=“?“;
line+=argv[i];//不同參數分割
}
????copy(line.begin()line.end()LINE);
????LINE[line.size()]=0;
if(CreateProcess(NAMELINENULLNULLFALSECREATE_NEW_CONSOLENULLNULL&si&pi))
{
GetSystemTime(&start);
}
else
{
cout<<“Create?Process?fails!“< ????exit(1);
}
}
WaitForSingleobject(pi.hProcessINFINITE); //(句柄對象,定時時間間隔)INFINITE表示線程一直被掛起,直到對象變為有信號狀態
CloseHandle(pi.hProcess);???
????CloseHandle(pi.hThread);
GetSystemTime(&end);
int?yearmonthdayhourminutesecondmillsecond;
year=end.wYear-start.wYear;
month=end.wMonth-start.wMonth;
day=end.wDay-start.wDay;
hour=end.wHour-start.wHour;
minute=end.wMinute-start.wMinute;
second=end.wSecond-start.wSecond;
millsecond=end.wMilliseconds-start.wMilliseconds;
if(millsecond<0)
{
millsecond+=1000;
second-=1;
}
if(second<0)
{
second+=60;
minute-=1;
}
if(minute<0)
{
minute+=60;
hour-=1;
}
????/*if(hour<0)
{
hour+=24;
day-=1;
}
if(day<0)
{
day+=30;
month-=1;
}
if(month<0)
{
month+=12;
year-=1;
}*/
cout<*year<<“年“< return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????694??2016-03-29?19:47??mytime\Debug\cl.command.1.tlog
?????文件??????28968??2016-03-29?19:47??mytime\Debug\CL.read.1.tlog
?????文件????????458??2016-03-29?19:47??mytime\Debug\CL.write.1.tlog
?????文件??????????2??2016-03-29?19:47??mytime\Debug\li
?????文件??????????2??2016-03-29?19:47??mytime\Debug\li
?????文件??????????2??2016-03-29?19:47??mytime\Debug\li
?????文件??????????2??2016-03-29?19:47??mytime\Debug\li
?????文件???????1324??2016-03-29?19:47??mytime\Debug\li
?????文件???????2818??2016-03-29?19:47??mytime\Debug\li
?????文件????????628??2016-03-29?19:47??mytime\Debug\li
?????文件??????82432??2016-03-29?19:47??mytime\Debug\mytime.exe
?????文件?????415228??2016-03-29?19:47??mytime\Debug\mytime.ilk
?????文件?????????93??2016-03-29?19:47??mytime\Debug\mytime.lastbuildstate
?????文件???????1510??2016-03-29?19:47??mytime\Debug\mytime.log
?????文件?????257473??2016-03-29?19:47??mytime\Debug\mytime.obj
?????文件?????814080??2016-03-29?19:47??mytime\Debug\mytime.pdb
?????文件??????31232??2016-03-29?19:00??mytime\Debug\text1.exe
?????文件?????707584??2016-03-29?19:47??mytime\Debug\vc110.idb
?????文件?????397312??2016-03-29?19:47??mytime\Debug\vc110.pdb
?????文件???????2197??2016-03-29?19:47??mytime\mytime.cpp
?????文件???32309248??2016-03-30?11:01??mytime\mytime.sdf
?????文件????????878??2016-03-29?19:47??mytime\mytime.sln
????..A..H.?????19968??2016-03-30?11:01??mytime\mytime.v11.suo
?????文件???????4008??2016-03-29?19:47??mytime\mytime.vcxproj
?????文件????????944??2016-03-29?19:47??mytime\mytime.vcxproj.filters
?????文件????????377??2016-03-29?19:47??mytime\mytime.vcxproj.user
?????目錄??????????0??2016-03-29?19:48??mytime\Debug
?????目錄??????????0??2016-03-30?11:28??mytime
-----------?---------??----------?-----??----
?????????????35079462????????????????????28
............此處省略1個文件信息
- 上一篇:畢業論文設計軟件開發
- 下一篇:Verilog 實現的UART通訊
評論
共有 條評論