lập trình viên thân mến Delphi,One-Shot Timers
Tôi đang tìm sự giúp đỡ như thế nào để viết một bộ đếm thời gian one-shot (No GUI, vì vậy VCL Timers ra các câu hỏi) ...
Hãy để tôi giải thích một chút xíu nữa.
Trong mã của tôi (giải thích với VCL hẹn giờ nhưng trong dự án đặc biệt này, tôi không có mẫu đính kèm):
- Gọi một
procedure
đó gửi một char qua cổng nối tiếp - Enable timer với một lượng X
Interval
Trong OnTimer
sự kiện:
tôi có một mã mà gửi một char sau đó vô hiệu hóa thứ e hẹn giờ chính nó để không bao giờ được thực hiện một lần nữa.
Vấn đề là tôi cần phải tạo ra các bộ hẹn giờ động này. Tôi đã nghĩ đến hàm SetTimer()
rồi KillTimer()
trong "Sự kiện OnTimer" để tắt nó (miễn phí nó).
Đây có phải là cách tốt (an toàn) không?
Cảm ơn bạn!
Tôi đã thực hiện ['một cái gì đó tương tự'] (http://stackoverflow.com/q/10468787/960757) một số thời gian trước đây. Cách tiếp cận của bạn nghe có vẻ tốt, nhưng lưu ý rằng nếu bạn bắt đầu nhiều hơn một bộ hẹn giờ tại một thời điểm, bạn sẽ cần phải phân biệt, một trong số đó đã kích hoạt thời gian chờ đó nếu bạn sử dụng một cuộc gọi lại chung cho tất cả chúng. – TLama
Tôi đã đọc hàm 'SetTimer()' mà bạn có thể đặt một "ID duy nhất" vào bộ hẹn giờ và giết bằng ID của chúng – ELCouz
Vâng, đó là những gì tôi đang làm trong mã đó. Tôi đang lưu trữ một bộ sưu tập các ID hẹn giờ và các thủ tục cần được thực hiện khi khoảng thời gian hẹn giờ trôi qua. Khi điều đó xảy ra, tôi tìm kiếm trong bộ sưu tập đó cho một mục theo ID của bộ hẹn giờ đã trôi qua và nếu nó được tìm thấy, tôi sẽ xóa bộ hẹn giờ, thực hiện quy trình đó và xóa mục đó khỏi bộ sưu tập. – TLama