2009-07-10 28 views
8

Tôi đang chuyển ứng dụng của mình sang cửa sổ từ Linux. Tôi khá mới mẻ với nghệ thuật ứng dụng porting trên nền tảng. Theo như tôi biết, Windows không hỗ trợ thực thi chủ đề POSIX. Điều này có đúng không? Tôi đã nghe nói về một số thực hiện pthreads cho các cửa sổ (một wrapper hoặc một cái gì đó), nó sẽ là tốt hơn để sử dụng chúng hoặc sử dụng CreateMutex và API khác được cung cấp bởi các cửa sổ ???? Ai đó xin. khai sáng cho tôi với các PRO và CON của cả hai thế giới. Một số mẹo linh tinh cho việc chuyển đổi sẽ trở nên độc đáo cùng với câu trả lời.Cửa sổ nào tốt hơn? pthreads hoặc CreateMutex?

Xin cảm ơn trước.

Trả lời

3

Một điều bạn cần lưu ý là tương lai của mã này là gì. Bạn có kế hoạch phát triển (và phát hành) trên cả hai nền tảng trong tương lai không? Hay đây là cổng một chiều?

Điều tốt nhất cần làm khi chuyển dự án là giữ cho các thay đổi thực tế đối với mã càng nhỏ càng tốt. Trong trường hợp của bạn, điều này có nghĩa là đi với một giải pháp pthread. Điều đó đang được nói, nếu bạn đang có kế hoạch này là một cổng một chiều, đi bản địa không bao giờ đau. :)

Tôi sẽ dành một chút thời gian để kiểm tra toàn bộ cả hai chiến thuật và sau đó triển khai thực hiện điều bạn cảm thấy thoải mái nhất.

7

Đó là tất cả sẽ là những thứ tương tự (pthreads chỉ là sẽ gọi EnterCriticalSection vv), vì vậy nếu bạn đã có một wrapper pthreads, có lẽ bạn nên sử dụng nó để bạn không phải thay đổi nhiều mã

0

Tại sao không có tốt nhất của cả hai thế giới và sử dụng một thư viện kết thúc tốt đẹp cả pthreads và API của Window và sử dụng một trong những thích hợp dưới trang bìa? Mã của bạn vẫn giữ nguyên trên cả hai nền tảng.

Không thiếu các lib như vậy trong C++ nên tôi không thể tưởng tượng không có phiên bản C nào về.

+0

APR (Apache Portable Runtime) là một thư viện C đa nền tảng tuyệt vời thực hiện việc này. Rất khuyến khích vì nó cũng được thử nghiệm và, um, khá phổ biến. – Clay

0

Trên các ứng dụng Windows C/C++ sử dụng CRT, cần gọi beginthread/beginthreadex để khởi tạo đúng CRT trong chuỗi mới.

1

Điều đầu tiên tôi muốn làm là chuyển sang Tăng luồng trong Linux so với Windows.

+0

Vậy chủ đề Boost sẽ tốt hơn POSIX như thế nào? – puffadder

+0

Về sau, Chủ đề Boost, mà cơ sở chuỗi thư viện chuẩn tiếp theo, sẽ là cách được khuyến nghị để thực hiện luồng trong nền tảng C++. API thread POSIX và API luồng Win32 thô không chính xác dễ dàng hoán đổi cho nhau. Biến điều kiện, ví dụ, có sẵn trong POSIX nhưng không có trên tất cả các nền tảng Win32. Nếu bạn định dựa vào thư viện, ví dụ như trình bao bọc POSIX/Win32, bạn có nguy cơ không biết chất lượng của thư viện và bạn có thể không nhận được nhiều trợ giúp. Mặt khác, bạn chắc chắn sẽ tìm thấy nhiều trợ giúp khi bạn gặp sự cố. –

+0

Cảm ơn. Đó là một sự giúp đỡ. Nó có sẵn cho C? – puffadder

5

này hoạt động tốt: http://sourceware.org/pthreads-win32/

Nó là một cổng của thư viện pthreads cho Windows.

+0

Tôi sẽ ném trong 2 xu của tôi rằng chúng tôi đã có may mắn rất tốt với thư viện này là tốt. Một ứng dụng khá phức tạp với rất nhiều semaphores, hàng đợi, và theads được chuyển từ VxWorks sang POSIX và cuối cùng lên Windows với điều này. –

+0

Thư viện này thật tuyệt vời! – vy32

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