2010-06-04 38 views
8

Với sự ra đời của tiện ích luồng trong STL cho tiêu chuẩn C++ mới (C++ 0x), nó sẽ tốt hơn để thay đổi mã hiện có đang sử dụng luồng POSIX hoặc thậm chí luồng Windows để sử dụng luồng STL ?C++ 0x luồng

Trả lời

5

Bạn luôn có thể đặt cược cược ... viết API luồng đơn giản của riêng bạn chỉ đủ để làm những gì ứng dụng của bạn cần thực hiện và thay đổi mã của bạn để nhắm mục tiêu API luồng của bạn. Sau đó, bạn có thể thực hiện các nội bộ của API luồng tùy chỉnh của mình bằng Windows hoặc Posix hoặc STL hoặc bất kỳ thứ gì và thay đổi việc triển khai bất cứ khi nào bạn cần mà không phải chạm vào toàn bộ mã của bạn mỗi lần.

Bằng cách thực hiện theo cách đó, bạn có thể bắt đầu với việc triển khai STL và sau đó, nếu nó chỉ ra, ví dụ: Windows có một vấn đề khó giải quyết bằng cách sử dụng đó, bạn chỉ có thể bao gồm một thực thi Windows-API thay thế bên trong my_threading_api.cpp (bên trong #ifdef WIN32) và bạn sẽ trở lại trong kinh doanh.

+0

Đây là những gì chúng tôi đã làm. Chúng tôi đã tạo "lớp trừu tượng hệ điều hành" của riêng chúng tôi với các triển khai phụ trợ khác nhau cho POSIX, Windows và một số RTOS khác mà chúng tôi sử dụng. Chúng tôi cũng có các lớp học cho semaphores, mutexes, giờ, vv Đó là một điều rất hữu ích để có. –

+0

+1: Giải pháp rất thú vị! – Alerty

4

Rất nhiều tùy thuộc vào mức độ bạn quan tâm về tính di động và mức độ bạn tận dụng các tính năng mà API gốc của bạn có thể cung cấp mà thư viện chuẩn không có. Luồng thư viện chuẩn là đủ giống với POSIX (ít nhất là trái) Tôi không thể nghĩ nhiều đến mức bạn có thể đạt được bằng POSIX (và do sự giống nhau, việc chuyển sang sử dụng thư viện chuẩn thường phải dễ dàng).

Luồng Windows đủ khác nhau khiến bạn có nhiều khả năng chạy vào thứ gì đó không quan trọng đối với việc sử dụng thư viện chuẩn và thậm chí ở cổng tốt nhất có thể sẽ không nhỏ.

2

Không thể biết được trước khi tính năng thư viện C++ 0x thường được hỗ trợ, do đó, câu trả lời cũng có thể phụ thuộc vào cách gắn với trình biên dịch cụ thể mà bạn có thể muốn. Bạn cũng có thể xem xét một khung công tác hoặc thư viện hoạt động trên đầu hoặc thực hiện thư viện C++ 0x, chẳng hạn như Boost Threads hoặc Intel Threading Building Blocks và để cho thư viện đó xử lý các chi tiết về việc liệu nó có sử dụng các tính năng hoặc nền tảng C++ 0x hay không API.

3

Không thay đổi trừ khi bạn thực sự cần. Tôi cho rằng mã hiện tại của bạn đang hoạt động tốt.

2

Điều đó tùy thuộc.

C++ 0x luồng chưa được hỗ trợ rộng rãi (tôi nghĩ GCC thực hiện nó, nhưng MSVC không, và tôi không biết khi nào họ dự định thêm hỗ trợ đó, nhưng tôi có thể nghi ngờ họ xem xét tính năng ưu tiên thấp)

Nếu mã của bạn hoạt động như vậy, tại sao lại thay đổi? Đối với các ứng dụng C++ mới, và giả sử hỗ trợ trình biên dịch, tôi sẽ đi với các chủ đề C++ 0x, đơn giản vì chúng là chuẩn, và nó là một API đẹp hơn nhiều so với các chuỗi Win32 hoặc POSIX.