Tôi cần một số lời khuyên trong mã hóa thích hợp:Mã hóa tốt? (Nhiều Vòng Tin Nhắn)
Tôi đang làm việc trên một chương trình có nhiều kết nối nối tiếp được sử dụng. Mỗi đường truyền thông có một bộ điều khiển làm việc như một lớp trừu tượng. Giữa bộ điều khiển và cổng nối tiếp, một giao thức được chèn vào để bọc dữ liệu trong các gói, sẵn sàng để chuyển. Giao thức sẽ xử lý các giao hàng không thành công, gửi lại, vv Để đảm bảo GUI không treo, mỗi đường kết nối (giao thức và cổng nối tiếp) được tạo trên một luồng riêng biệt. Bộ điều khiển được xử lý bởi luồng chính, vì nó có các nút điều khiển trong GUI.
Hiện tại, khi tạo chủ đề, tôi đã chọn tạo vòng lặp thông báo trên chúng (Application.Run()), vì vậy thay vì bỏ phiếu đệm và sinh nếu không có công việc, tôi chỉ cần gọi luồng (BeginInvoke) và sử dụng vòng lặp tin nhắn như một bộ đệm. Điều này hiện đang hoạt động độc đáo, và không có vấn đề nghiêm trọng cho đến nay.
Câu hỏi của tôi bây giờ là: Đây có phải là "mã hóa tốt" hay tôi nên sử dụng vòng lặp while trên tread và là bộ đệm bỏ phiếu thay thế ?, hoặc một số thứ ba?
Tôi muốn hiển thị mã, nhưng cho đến nay nó là hàng nghìn dòng mã, vì vậy hãy cụ thể nếu bạn cần xem bất kỳ phần nào của mã. :)
Cảm ơn bạn.
Không thực sự, không. WM_COPYDATA là tốt cho giao tiếp giữa các quá trình. Thật vô nghĩa khi sử dụng nó cho các giao tiếp giữa các luồng trong một quá trình. Nó dễ dàng hơn/đơn giản hơn để chỉ cần vượt qua bộ đệm/blob/bất kỳ đối tượng nào bằng con trỏ, ví dụ. bằng cách truyền * Bộ đệm vào tin nhắn.lParam, PostMessage() ing và truyền lại ở đầu kia. –
Hàng đợi tin nhắn Windows được tối ưu hóa để giao tiếp với các chủ đề GUI. Không phải là tối ưu để giao tiếp từ các luồng GUI đến các luồng công việc không phải GUI. Ngay cả một hàng đợi tiêu dùng sản xuất tiêu dùng, không được tối ưu hóa dựa trên semaphore đơn giản nhanh gấp bốn lần so với WMQ. Trong hầu hết các ứng dụng, hiệu năng xếp hàng P-C thường không phải là vấn đề. –
Tôi đồng ý về cả hai điểm thực sự. Tôi sẽ chỉnh sửa WM_COPYDATA; Tôi không suy nghĩ rõ ràng. Về hàng đợi tin nhắn, đó là giải pháp dựa trên sự kiện tổng quát. Tùy thuộc vào yêu cầu của ứng dụng, các mô hình khác có thể tốt hơn. – tenfour