Thuật ngữ
sự kiện : Một loại điều có thể xảy ra.
bắn sự kiện : Một sự kiện cụ thể xảy ra; một sự kiện xảy ra
người nghe sự kiện : Một cái gì đó trông ra cho sự kiện cháy.
xử lý sự kiện : Một cái gì đó xảy ra khi một người nghe sự kiện phát hiện một sự kiện bắn.
người đăng ký sự kiện : Phản hồi mà người xử lý sự kiện phải gọi.
Các định nghĩa này không phụ thuộc vào việc thực hiện, vì vậy chúng có thể được thực hiện theo nhiều cách khác nhau.
Một số thuật ngữ này thường bị nhầm với từ đồng nghĩa vì thường không cần người dùng phân biệt giữa chúng.
Kịch bản thường gặp
Sự kiện lập trình-logic.
Sự kiện này là khi một số phương thức được gọi.
Một sự kiện bắn là một cuộc gọi cụ thể cho phương pháp đó.
Trình lắng nghe sự kiện là một cái móc trong phương thức sự kiện được gọi trong mỗi lần phát sinh sự kiện gọi trình xử lý sự kiện.
Trình xử lý sự kiện gọi một bộ sưu tập các thuê bao sự kiện.
Người đăng ký sự kiện thực hiện bất kỳ hành động nào mà hệ thống có nghĩa là xảy ra để đáp ứng với sự kiện xảy ra.
Các sự kiện bên ngoài.
Sự kiện này là một sự kiện bên ngoài có thể được suy ra từ các đài quan sát.
Một sự kiện bắn là khi sự kiện bên ngoài đó có thể được công nhận là đã xảy ra.
Người nghe sự kiện bằng cách nào đó phát hiện sự kiện cháy, thường bằng cách bỏ phiếu (các) có thể quan sát được, sau đó nó gọi trình xử lý sự kiện khi phát hiện sự kiện đang diễn ra.
Trình xử lý sự kiện gọi một bộ sưu tập các thuê bao sự kiện.
Người đăng ký sự kiện thực hiện bất kỳ hành động nào mà hệ thống có nghĩa là xảy ra để đáp ứng với sự kiện xảy ra.
Bỏ phiếu so với chèn móc vào cơ chế bắn của sự kiện
Quan điểm của những người khác là việc bỏ phiếu thường không cần thiết. Điều này là do người nghe sự kiện có thể được thực hiện bằng cách tự động gọi sự kiện xử lý sự kiện, đây thường là cách hiệu quả nhất để thực hiện mọi thứ khi sự kiện xảy ra ở cấp hệ thống.
Bằng cách tương tự, bạn không cần kiểm tra hộp thư của mình để nhận thư mỗi ngày nếu nhân viên bưu điện gõ cửa nhà bạn và trao thư trực tiếp cho bạn.
Tuy nhiên, người nghe sự kiện cũng có thể làm việc bằng cách bỏ phiếu. Bỏ phiếu không nhất thiết phải kiểm tra một giá trị cụ thể hoặc có thể quan sát khác; nó có thể phức tạp hơn Nhưng, về tổng thể, điểm bỏ phiếu là suy luận khi một số sự kiện đã xảy ra để nó có thể được phản hồi.
Bằng cách tương tự, bạn phải kiểm tra hộp thư của bạn mỗi ngày khi nhân viên bưu điện chỉ bỏ thư trong đó. Bạn sẽ không phải thực hiện công việc bỏ phiếu này nếu bạn có thể hướng dẫn nhân viên bưu điện gõ cửa nhà bạn, nhưng đó thường không phải là một khả năng.
Chuỗi sự kiện logic
Trong nhiều ngôn ngữ lập trình, bạn có thể viết một sự kiện chỉ được gọi khi nhấn phím trên bàn phím hoặc tại một thời điểm nhất định. Mặc dù đây là những sự kiện bên ngoài, bạn không cần phải thăm dò ý kiến. Tại sao?
Đó là vì hệ điều hành đang bỏ phiếu cho bạn. Ví dụ: Windows kiểm tra các nội dung như thay đổi trạng thái bàn phím và nếu phát hiện ra một thứ, nó sẽ gọi các thuê bao sự kiện. Vì vậy, khi bạn đăng ký một sự kiện nhấn bàn phím, bạn thực sự đang đăng ký một sự kiện mà chính nó là người đăng ký cho một sự kiện bỏ phiếu.
Bằng cách tương tự, giả sử rằng bạn đang sống trong một khu chung cư và một nhân viên bưu điện thả thư vào khu vực nhận thư chung. Sau đó, một nhân viên giống như hệ điều hành có thể kiểm tra thư đó cho mọi người, gửi thư đến căn hộ của những người nhận được thứ gì đó. Điều này tránh cho mọi người những rắc rối khác khi phải thăm dò khu vực nhận thư.
Trực giác của tôi sẽ cho rằng người nghe sự kiện liên tục kiểm tra xem sự kiện đã bị hủy hay chưa, nghĩa là, trong kịch bản của tôi, nó sẽ không khác gì kiểm tra mọi khung hình nếu sự kiện đã bị bắn.
Dựa trên các cuộc thảo luận trong lớp, có vẻ như người nghe sự kiện hoạt động theo một cách khác.
Làm thế nào để một người nghe sự kiện làm việc?
Như bạn đã nghi ngờ, một sự kiện có thể hoạt động thông qua bỏ phiếu. Và nếu một sự kiện nào đó liên quan đến các sự kiện bên ngoài, ví dụ như một phím bàn phím bị nhấn, thì việc bỏ phiếu sẽ phải xảy ra tại một số điểm.
Cũng đúng là các sự kiện không nhất thiết phải liên quan đến việc bỏ phiếu. Ví dụ: nếu sự kiện là khi nhấn nút, thì trình lắng nghe sự kiện của nút đó là phương thức mà khung GUI có thể gọi khi xác định rằng nhấp chuột chạm vào nút. Trong trường hợp này, việc bỏ phiếu vẫn phải xảy ra khi nhấp chuột để phát hiện, nhưng người nghe chuột là một yếu tố thụ động hơn được kết nối với cơ chế bỏ phiếu nguyên thủy thông qua chuỗi sự kiện.
Cập nhật: Về bỏ phiếu phần cứng cấp thấp
Hóa ra các thiết bị USB và các giao thức giao tiếp hiện đại khác có một bộ giao thức tương tự như mạng để thu hút các tương tác, cho phép các thiết bị I / O bao gồm bàn phím và chuột tham gia vào các cấu trúc liên kết ad hoc .
Thật thú vị, " ngắt " là những thứ khá bắt buộc, đồng bộ, vì vậy chúng không xử lý các cấu trúc liên kết mạng ad hoc . Để khắc phục điều này, " ngắt " đã được khái quát thành các gói ưu tiên cao không đồng bộ được gọi là " giao dịch ngắt " (trong ngữ cảnh của USB) hoặc " ngắt tín hiệu tin nhắn " (trong ngữ cảnh của PCI). Giao thức này được mô tả trong thông số kỹ thuật USB:
- " Hình 8-31. Số lượng lớn / Kiểm soát / Ngắt máy trạng thái máy chủ giao dịch " trong "Thông số kỹ thuật bus nối tiếp toàn cầu, phiên bản 2.0" , trang in-222; PDF-trang-250 (2000-04-27)
Ý chính dường như là các thiết bị I / O và các thành phần giao tiếp (như các trung tâm USB) về cơ bản hoạt động như các thiết bị mạng. Vì vậy, họ gửi tin nhắn, yêu cầu bỏ phiếu cổng của họ và như vậy. Điều này làm giảm nhu cầu về các dòng phần cứng chuyên dụng.
Hệ điều hành như Windows dường như xử lý quá trình bỏ phiếu chính nó, ví dụ như mô tả trong tài liệu MSDN cho USB_ENDPOINT_DESCRIPTOR
's trong đó mô tả làm thế nào để kiểm soát mức độ thường xuyên của Windows các cuộc thăm dò một bộ điều khiển lưu trữ USB cho thông điệp ngắt / đẳng thời:
Các bInterval
giá trị có chứa khoảng bỏ phiếu cho các điểm cuối ngắt và đẳng thời. Đối với các loại điểm cuối khác, giá trị này nên được bỏ qua. Giá trị này phản ánh cấu hình của thiết bị trong phần sụn. Trình điều khiển không thể thay đổi nó.
Khoảng thời gian bỏ phiếu, cùng với tốc độ của thiết bị và loại bộ điều khiển máy chủ, xác định tần suất mà trình điều khiển sẽ bắt đầu chuyển giao gián đoạn hoặc chuyển động đẳng thời. Giá trị trong bInterval
không đại diện cho một khoảng thời gian cố định. Đó là một giá trị tương đối và tần suất bỏ phiếu thực tế cũng sẽ phụ thuộc vào việc thiết bị và bộ điều khiển máy chủ USB hoạt động ở tốc độ thấp, đầy đủ hay cao.
- "Cấu trúc USB_ENDPOINT_DESCRIPTOR" , Trung tâm phát triển phần cứng, Microsoft
Các giao thức kết nối màn hình mới hơn như DisplayPort dường như cũng làm như vậy:
Vận tải đa luồng (MST)
-Slide # 14 từ "Tổng quan về DisplayPortTM Ver.1.2" (2010-12-06)
Sự trừu tượng hóa này cho phép một số tính năng gọn gàng, như chạy 3 màn hình từ một kết nối:
DisplayPort Multi-Stream Transport cũng cho phép kết nối ba hoặc nhiều thiết bị với nhau nhưng ngược lại, cấu hình dựa trên "người tiêu dùng" ít hơn: điều khiển đồng thời nhiều màn hình từ một cổng đầu ra.
- "Cổng hiển thị" , Wikipedia
Về mặt khái niệm, điểm cần tránh khỏi điều này là các cơ chế bỏ phiếu cho phép truyền thông nối tiếp tổng quát hơn, điều này thật tuyệt vời khi bạn muốn có nhiều chức năng chung hơn. Vì vậy, phần cứng và hệ điều hành thực hiện nhiều cuộc bỏ phiếu cho hệ thống logic. Sau đó, người tiêu dùng đăng ký các sự kiện có thể tận hưởng những chi tiết được xử lý cho họ bởi hệ thống cấp thấp hơn mà không phải viết các giao thức bỏ phiếu / chuyển tin nhắn của riêng họ.
Cuối cùng, các sự kiện như bấm phím dường như trải qua một chuỗi các sự kiện khá thú vị trước khi đến cơ chế bắn sự kiện bắt buộc ở cấp độ phần mềm.