Kiểm tra sự tồn tại và thời gian hoạt động cuối cùng
Như chúng ta đã thấy trong phần trước, bạn có thể kiểm tra sự tồn tại của một biến toàn cục bằng cách cố gắng đọc giá trị của nó: nếu điều này không dẫn đến mã lỗi trong _LastError
, thì biến toàn cục tồn tại, và chúng ta đã lấy được giá trị của nó để sử dụng trong thuật toán. Tuy nhiên, nếu trong một số điều kiện bạn chỉ cần kiểm tra sự tồn tại mà không đọc biến toàn cục, sẽ tiện lợi hơn khi sử dụng một hàm khác được thiết kế đặc biệt cho việc này: GlobalVariableCheck
.
Có một cách kiểm tra khác, đó là sử dụng hàm GlobalVariableTime
. Như tên gọi của nó ngụ ý, hàm này cho phép bạn tìm ra thời gian sử dụng cuối cùng của một biến. Nhưng nếu biến không tồn tại, thì thời gian sử dụng của nó không có, tức là bằng 0.
bool GlobalVariableCheck(const string name)
Hàm này kiểm tra sự tồn tại của một biến toàn cục với tên được chỉ định và trả về kết quả: true
(biến tồn tại) hoặc false
(không có biến).
datetime GlobalVariableTime(const string name)
Hàm này trả về thời gian sử dụng cuối cùng của biến toàn cục với tên được chỉ định. Việc sử dụng có thể được biểu thị bằng việc sửa đổi hoặc đọc giá trị của biến.
Việc kiểm tra sự tồn tại của biến bằng
GlobalVariableCheck
hoặc lấy thời gian của nó thông quaGlobalVariableTime
không làm thay đổi thời gian sử dụng.
Trong script GlobalsRunCheck.mq5
, chúng ta sẽ bổ sung một chút mã từ GlobalsRunCount.mq5
để ngay từ đầu hàm OnStart
kiểm tra sự hiện diện của biến và thời gian sử dụng của nó.
void OnStart()
{
PRTF(GlobalVariableCheck(gv));
PRTF(GlobalVariableTime(gv));
...
2
3
4
5
Mã bên dưới không thay đổi. Trong khi đó, lưu ý rằng biến gv
được định nghĩa qua __FILE__
lần này sẽ chứa tên script mới GlobalsRunCheck.mq5
làm tên của biến toàn cục (tức là mỗi script có bộ đếm toàn cục riêng).
Tất cả các lần chạy ngoại trừ lần đầu tiên sẽ hiển thị true
từ hàm GlobalVariableCheck
(biến tồn tại) và thời gian của biến từ lần chạy trước đó. Dưới đây là một ví dụ nhật ký:
GlobalVariableCheck(gv)=false / ok
GlobalVariableTime(gv)=1970.01.01 00:00:00 / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariableGet(gv)=0.0 / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariableSet(gv,count)=2021.08.29 16:59:35 / ok
This script run count: 1
GlobalVariableCheck(gv)=true / ok
GlobalVariableTime(gv)=2021.08.29 16:59:35 / ok
GlobalVariableGet(gv)=1.0 / ok
GlobalVariableSet(gv,count)=2021.08.29 16:59:45 / ok
This script run count: 2
GlobalVariableCheck(gv)=true / ok
GlobalVariableTime(gv)=2021.08.29 16:59:45 / ok
GlobalVariableGet(gv)=2.0 / ok
GlobalVariableSet(gv,count)=2021.08.29 16:59:56 / ok
This script run count: 3
2
3
4
5
6
7
8
9
10
11
12
13
14
15