Tạm dừng chương trình
Như chúng ta đã thấy trước đó trong các ví dụ, đôi khi các chương trình cần lặp lại một số hành động định kỳ, theo một lịch trình đơn giản hoặc sau khi các lần thử trước đó thất bại. Khi điều này được thực hiện trong một vòng lặp, nên tạm dừng chương trình thường xuyên để tránh các yêu cầu quá thường xuyên và tải không cần thiết lên CPU, cũng như để dành thời gian cho các "người chơi" bên ngoài thực hiện công việc của họ (ví dụ, nếu chúng ta đang đợi dữ liệu từ một chương trình khác, tải lịch sử báo giá, v.v.).
Để phục vụ mục đích này, MQL5 cung cấp hàm Sleep
. Phần này đưa ra mô tả chính thức của nó, và một ví dụ sẽ được trình bày trong phần tiếp theo, cùng với các hàm dùng để đo khoảng thời gian.
void Sleep(int milliseconds)
Hàm này tạm dừng việc thực thi chương trình MQL trong số mili giây được chỉ định. Sau khi thời gian này hết, các lệnh sau lời gọi Sleep
sẽ tiếp tục được thực thi.
Việc sử dụng hàm này trước tiên có ý nghĩa trong script và dịch vụ vì các loại chương trình này không có cách nào khác để chờ đợi.
Trong các Expert Advisors và chỉ báo, nên sử dụng bộ đếm thời gian và sự kiện OnTimer
. Trong mô hình này, chương trình MQL trả lại quyền điều khiển cho terminal và sẽ được gọi lại sau một khoảng thời gian được chỉ định.
Hơn nữa, hàm Sleep
không thể được gọi từ các chỉ báo, vì chúng được thực thi trong các luồng giao diện terminal, việc tạm dừng chúng sẽ ảnh hưởng đến việc hiển thị biểu đồ.
Nếu người dùng ngắt chương trình MQL từ giao diện terminal trong khi nó đang đợi lời gọi Sleep
hoàn tất, việc thoát khỏi hàm sẽ xảy ra ngay lập tức (trong vòng 100ms), tức là khoảng dừng kết thúc sớm hơn dự kiến. Điều này sẽ đặt cờ dừng _StopFlag
(cũng có thể truy cập qua hàm IsStopped
), và chương trình nên dừng thực thi một cách nhanh chóng và chính xác nhất có thể.