2011-08-29 25 views
11

Tôi rất vui khi thấy Delphi giới thiệu bản ghi TMonitor trong Delphi 2009, cho phép bạn khóa các đối tượng cụ thể trong môi trường đa luồng. Điều khiến tôi bối rối là phương pháp Pulse và PulseAll của loại bản ghi này.Trong Delphi, System.TMonitor.Pulse và TMonitor.PulseAll thực sự làm gì

Ví dụ: mục nhập cho trạng thái trợ giúp của Pulse trong Delphi "Thông báo chuỗi tiếp theo trong hàng chờ đợi sẽ có thể khóa đối tượng được chỉ định ngay khi chuỗi gọi phát hành đối tượng."

Thật sao? Điều đó nghĩa là gì? Tôi đã sử dụng TMonitor mà không cần sử dụng Pulse mà không gặp vấn đề gì. Ngoài ra, một số công dụng của TMonitor trong nguồn của Delphi không bao giờ sử dụng Pulse.

Phương pháp Pulse và PulseAll chỉ được bao gồm trong bản ghi TMonitor của Delphi cho khả năng tương thích cấp nguồn với lớp .NET Monitor, hay chúng thực sự phục vụ một mục đích?

Có hai câu hỏi ("TMonitor.Pulse vs TMonitor.PulseAll""What is TMonitor in Delphi System unit good for") nói về vấn đề này, nhưng tôi đang tìm câu trả lời cuối cùng.

Trả lời

4

Liên kết wikipedia trong câu trả lời của tôi cho câu hỏi được tham chiếu cung cấp một cuộc thảo luận về việc sử dụng chức năng chờ/xung/pulseall của màn hình. Một chủ đề phải nhập vào màn hình mà họ gọi chờ. Sau đó, một sợi khác phải nhập vào màn hình và xung gọi hoặc pulseall để báo hiệu luồng chờ đầu tiên. Pulse chỉ báo hiệu một luồng chờ, trong khi pulseall báo hiệu tất cả các luồng chờ. Nhìn vào phần biến điều kiện của bài viết wikipedia để có một cuộc thảo luận chi tiết hơn. Cũng có các chú thích trong nguồn RTL mô tả các phương thức của TMonitor.

+2

TMonitor có được cố định trong XE2 không? –

+0

@ David, tha thứ cho sự thiếu hiểu biết của tôi, nhưng điều gì đã xảy ra với nó? – Johan

+0

@johan Rõ ràng Wait và Pulse không hoạt động đúng cách. Rất nhiều blog về nó một vài tháng trở lại từ Chris Rolliston, Primoz, Eric Grange vv –

Các vấn đề liên quan