2009-04-07 16 views

Trả lời

3

Tôi muốn đề xuất gói CRITICAL_SECTION với một lớp sẽ xử lý việc khởi tạo và uninitialization đối tượng phần quan trọng trong hàm tạo và hàm hủy của nó. Bằng cách này, bạn sẽ là chủ đề an toàn trong hầu hết các trường hợp (bạn sẽ phải đảm bảo không có ai truy cập đối tượng trước khi hàm tạo của nó hoàn thành, nhưng điều đó tương đối dễ dàng).

Có một số trình bao bọc phổ biến cho CRITICAL_SECTION bạn có thể sử dụng. MFC của CCriticalSection là choise rõ ràng, nhưng bạn có thể tạo của riêng bạn là tốt.

1

Chắc chắn có nhiều cách.

  1. Sử dụng một biến toàn cầu
  2. Sử dụng một ví dụ singleton
  3. Tạo nó trong chính hoặc một số chức năng trường hợp duy nhất khác
  4. Tạo nó như là một var thành viên của một số cá thể của lớp trường hợp duy nhất

và cứ tiếp tục như vậy. Điều này không khác với bất kỳ câu hỏi nào khác về việc cố gắng tạo một cá thể đơn lẻ của một số thứ trong mã của bạn.

0

Bạn cũng có thể sử dụng lớp trình bao bọc và khai báo đối tượng chung của lớp đó. Hàm khởi tạo của đối tượng chung sẽ được gọi chỉ một lần khi khởi động.

5

Trên Windows Vista, bạn có thể sử dụng chức năng khởi tạo một lần. Using One-Time Initialization cho biết cách sử dụng chúng để đảm bảo sự kiện chỉ được khởi tạo một lần.

+0

Đây chắc chắn là một cách tiếp cận tốt; dựa vào các biến toàn cầu hoặc các singletons không hoạt động tốt nếu phần quan trọng cần được sử dụng trước khi tất cả các nhà xây dựng đối tượng toàn cục được đảm bảo được gọi. – reuben

0

Bạn có thể khởi tạo phần quan trọng toàn cầu trong DllMain cho DLL_PROCESS_ATTACH (và dọn dẹp cho DLL_PROCESS_DETACH).

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