2011-01-26 37 views
6

Đầu những gì tôi đã làm (mẫu tối thiểu sẽ được cung cấp nếu nó không chỉ cho tôi làm điều gì đó ngu ngốc đồng bằng):Chia sẻ một tăng :: đối tượng ASIO :: io_service giữa các thư viện tự động nạp

Tôi có một ứng dụng GUI đó sẽ hỗ trợ một số giao diện mạng để thay đổi nội dung được hiển thị trong GUI. Các giao diện mạng được nhận ra dưới dạng các plugin được nạp động khi khởi động GUI. Ứng dụng GUI cung cấp một đối tượng boost :: asio :: io_service mà nó truyền qua tham chiếu đến các giao diện để chúng có thể sử dụng nó để xây dựng I/O không đồng bộ. Trong chủ đề GUI, đối tượng io_service này được chọn để đồng bộ hóa quyền truy cập của giao diện mạng vào nội dung.

Vấn đề bây giờ là các trình xử lý không được gọi bởi đối tượng io_service khi nó được thăm dò. Để thu hẹp điều này, tôi chỉ thực hiện một giao diện và tạo đối tượng io_service trong đó, vẫn gọi cuộc thăm dò từ chủ đề GUI và nó hoạt động.

Câu hỏi của tôi bây giờ là: có thể có vấn đề chung khi chuyển đối tượng io_service vào các hàm DLL được tải khi chạy không?

Nếu trường hợp quá rõ ràng, tôi sẽ cung cấp ví dụ tối thiểu.

EDIT: Tôi cảm thấy thực sự ngu ngốc :) Chỉ cần tấn công với nhau một ví dụ tối thiểu và điều đó - tất nhiên - hoạt động như một sự quyến rũ. Điều đó khá có nghĩa là nguồn gốc của vấn đề từ một phần khác của phần mềm.

Vì vậy, cảm ơn tất cả mọi người vì mục nhập của họ!

Để làm cho câu hỏi này ít hữu ích hơn: Bất kỳ ai muốn thực hiện điều gì đó tương tự (plugin cho mạng được đồng bộ hóa thông qua tăng :: asio :: io_service), bạn có thể tải xuống ví dụ tối thiểu here.

+1

Kịch bản rõ ràng, nhưng một ví dụ chắc chắn sẽ hữu ích. –

+0

không có gì sai khi sử dụng cùng một io_service bởi bất kỳ số lượng DLL nào, và nhiều hơn nữa, nó có thể được sử dụng bởi bất kỳ số lượng các chủ đề (nếu bạn biết những gì bạn làm). vì vậy vui lòng cung cấp mẫu bắt đầu các ops không đồng bộ và bỏ phiếu –

+0

Đúng, có vẻ như tôi đã phạm một số sai lầm tại một số điểm khác. Kịch bản này sẽ hoạt động mà không có vấn đề gì. – LiMuBei

Trả lời

2

Tôi sẽ kiểm tra một số tùy chọn:
* Có thể đối tượng được sao chép tại một số điểm thay vì được truyền bằng tham chiếu; bạn có thể làm cho nó tăng cường :: noncopyable để ngăn chặn điều này xảy ra.
* Kiểm tra giá trị trả về của cuộc thăm dò nếu nó lớn hơn 0 một số trình xử lý được chạy; nếu nó là 0 vấn đề là tăng nghĩ rằng không có xử lý.
* Thêm trình xử lý thử nghiệm trong ứng dụng GUI của bạn để loại trừ tùy chọn đó là sự cố liên quan đến DLL.

Gỡ lỗi vui vẻ!

+0

Vì không có vấn đề chung với kịch bản và tôi chỉ cần gỡ lỗi tốt hơn phần mềm của mình, tôi sẽ đánh dấu phần này là câu trả lời đúng. Cảm ơn! – LiMuBei

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