Bộ đếm khoảng thời gian
Để phát hiện một khoảng thời gian lên đến một giây, chỉ cần lấy hiệu giữa hai giá trị datetime
thu được bằng cách sử dụng TimeLocal
. Tuy nhiên, đôi khi chúng ta cần độ chính xác cao hơn nữa. Để phục vụ mục đích này, MQL5 cho phép bạn lấy bộ đếm hệ thống mili giây (GetTickCount
, GetTickCount64
) hoặc micro giây (GetMicrosecondCount
).
uint GetTickCount()
ulong GetTickCount64()
Các hàm này trả về số mili giây đã trôi qua kể từ khi hệ điều hành được tải. Độ chính xác của thời gian bị giới hạn bởi bộ đếm thời gian hệ thống tiêu chuẩn (khoảng 10-15 mili giây). Để đo khoảng thời gian chính xác hơn, hãy sử dụng hàm GetMicrosecondCount
.
Trong trường hợp hàm GetTickCount
, kiểu trả về uint
xác định trước khoảng thời gian sau đó bộ đếm sẽ tràn: khoảng 49,7 ngày. Nói cách khác, việc đếm sẽ bắt đầu lại từ 0 nếu máy tính không được tắt trong thời gian dài như vậy.
Ngược lại, hàm GetTickCount64
trả về giá trị ulong
, và bộ đếm này sẽ không tràn trong tương lai gần (584.942.417 năm).
ulong GetMicrosecondCount()
Hàm này trả về số micro giây đã trôi qua kể từ khi chương trình MQL bắt đầu.
Ví dụ về cách sử dụng các hàm bộ đếm và Sleep
được tóm tắt trong script TimeCount.mq5
.
void OnStart()
{
const uint startMs = GetTickCount();
const ulong startMcs = GetMicrosecondCount();
// vòng lặp trong 5 giây
while(PRTF(GetTickCount()) < startMs + 5000)
{
PRTF(GetMicrosecondCount());
Sleep(1000);
}
PRTF(GetTickCount() - startMs);
PRTF(GetMicrosecondCount() - startMcs);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dưới đây là kết quả đầu ra nhật ký của script có thể trông như thế nào.
GetTickCount()=12912811 / ok
GetMicrosecondCount()=278 / ok
GetTickCount()=12913903 / ok
GetMicrosecondCount()=1089845 / ok
GetTickCount()=12914995 / ok
GetMicrosecondCount()=2182216 / ok
GetTickCount()=12916087 / ok
GetMicrosecondCount()=3273823 / ok
GetTickCount()=12917179 / ok
GetMicrosecondCount()=4365889 / ok
GetTickCount()=12918271 / ok
GetTickCount()-startMs=5460 / ok
GetMicrosecondCount()-startMcs=5458271 / ok
2
3
4
5
6
7
8
9
10
11
12
13