Timer
Post date: Nov 28, 2013 1:02:13 AM
از این پست به بعد، وبلاگ از نو شروع میشود. اول بازنویسی پستهای قبلی را که مربوط به ++C هستند شروع میکنم.
این برنامهای است که ساعت کامپیوتر را نشان میدهد. البته شاید با برنامههای ساده تری هم بشود این کار را کرد، اما این برنامه از تابعهای API که مخصوص برنامه نویسی ویندوز هستند استفاده میکند. تابعهای API امکانات بیش تری دارند و به آن چیزی که در ویندوز میگذرد نزدیک ترند. برنامه را خوب بررسی کنید. در کلاس Time امکاناتی هست که اصلا به کار برده نشده است. کلاسی به اسم Timer را میشود با استفاده از کلاس Time نوشت که مثل زمان سنج عمل کند.
این متن برنامه که در کامپایلر رایگان Visual C++ 2010 Express اجرا میشود:
#include
<string>
#include
<windows.h>
#include
<conio.h>
#include
<iostream>
using
namespace
std;
class
Time
{
public:
SYSTEMTIME
local_time;
unsigned
long
long
time;
unsigned
long
long
num(FILETIME
ft)
{
ULARGE_INTEGER
ui;
ui.LowPart
=
ft.dwLowDateTime;
ui.HighPart
=
ft.dwHighDateTime;
return
ui.QuadPart;
}
//--------------------------------------------
FILETIME
FT(unsigned
long
long
ull)
{
FILETIME
ret;
ULARGE_INTEGER
ui;
ui.QuadPart
=
ull;
ret.dwLowDateTime
=
ui.LowPart;
ret.dwHighDateTime
=
ui.HighPart;
return
ret;
}
//--------------------------------------------
SYSTEMTIME
Decompose(unsigned
long
long
tm)
{
FILETIME
ft
=
FT(tm);
SYSTEMTIME
ret;
FileTimeToSystemTime(&ft,&ret);
return
ret;
}
//--------------------------------------------
void
SetTime(unsigned
long
long
tm)
{
this
->
time
=
tm;
local_time
=
Decompose(tm);
}
//--------------------------------------------
public:
void
UpdateTime()
{
FILETIME
ft;
GetLocalTime(&local_time);
SystemTimeToFileTime(&local_time,&ft);
SetTime(num(ft));
}
//--------------------------------------------
int
Milli()
{
return
local_time.wMilliseconds;
}
int
Sec()
{
return
local_time.wSecond;
}
int
Min()
{
return
local_time.wMinute;
}
int
Hour()
{
return
local_time.wHour;
}
int
Day()
{
return
local_time.wDay;
}
int
Month()
{
return
local_time.wMonth;
}
int
Year()
{
return
local_time.wYear;
}
//--------------------------------------------
void
AddTime(int
hour,
int
min
,int
sec
=
0,
int
milli
=
0)
{
unsigned
long
long
millis
=
milli
+
1000
*
sec
+
1000
*
60
*
min
+
1000
*
60
*
60
*
hour;
SetTime(
time
+
10000
*
millis
);
}
void
AddDay(int
day)
{
unsigned
long
long
millis
=
1000
*
60
*
60
*
24
*
day;
SetTime(
time
+
10000
*
millis
);
}
//--------------------------------------------
unsigned
long
long
TotalMilli()
{
return
time
/
10000;
}
unsigned
long
long
TotalSec()
{
return
TotalMilli()
/
1000;
}
unsigned
long
long
TotalMin()
{
return
TotalSec()
/
60;
}
unsigned
long
long
TotalHour()
{
return
TotalMin()
/
60;
}
unsigned
long
long
TotalDay()
{
return
TotalHour()
/
24;
}
//--------------------------------------------
wstring
GetString()
{
wstring
ret;
wchar_t
a[10];
_itow(Month(),a,10);
ret
+=
a;
ret
+=
L"/";
_itow(Day(),a,10);
ret
+=
a;
ret
+=
L"/";
_itow(Year(),a,10);
ret
+=
a;
ret
+= L" ";
_itow(Hour(),a,10);
ret
+=
a;
ret
+=
L":";
_itow(Min(),a,10);
ret
+=
a;
ret
+=
L":";
_itow(Sec(),a,10);
ret
+=
a;
ret
+=
L".";
_itow(Milli(),a,10);
ret
+=
a;
return
ret;
}
//--------------------------------------------
Time
operator
+
(Time
Tm)
{
Time
ret(0);
ret.SetTime(this
->
time
+
Tm.time);
returnهم بشه این
ret;
}
Time
operator
-
(Time
Tm)
{
Time
ret(0);
ret.SetTime(this
->
time
-
Tm.time);
return
ret;
}
Time&
operator
=
(unsigned
long
long
tm)
{
SetTime(tm);
return
*this;
}
Time&
operator
=
(const
Time&
tm)
{
SetTime(tm.time);
return
*this;
}
void
operator
+=
(Time
Tm)
{
*this
=
*this
+
Tm;
}
void
operator
-=
(Time
Tm)
{
*this
=
*this
-
Tm;
}
//--------------------------------------------
Time()
{
UpdateTime();
}
Time(unsigned
long
long
time)
{
SetTime(time);
}
Time(int
hour,
int
min,
int
sec
=
0,
int
milli
=
0)
{
SetTime(0);
AddTime(hour,min,sec,milli);
}
};
int
main()
{
Time
T;
for(int
i
=
0;
i
<
150;
i++)
{
Sleep(100);
T.UpdateTime();
wstring
str
=
T.GetString();
wcout<<
L"\r"
<<
str;
}
_getch();
}
Output:
6/13/2010
2:41:59.537