2012-06-24 34 views
5

Tôi cần viết chương trình sử dụng chủ đề và ổ cắm. Cách tốt nhất để làm điều đó cho các nền tảng khác nhau (Linux, Windows, Mac) là gì.Sử dụng luồng và ổ cắm trong C theo cách độc lập trên nền tảng

Tôi biết về POSIX, nhưng không có POSIX trên Win.

Có thư viện nào xử lý theo cách độc lập trên nền tảng không?

+3

[POSIX cho Windows] (http://en.wikipedia.org/wiki/POSIX#POSIX_for_Windows) – Kulti

Trả lời

5

Nếu bạn thực sự muốn C (không phải C++), tôi đề xuất sử dụng các chuỗi POSIX chuẩn trên nền tảng không phải Windows và sử dụng pthreads-win32 trên Windows. Nó hỗ trợ cả 32 và 64 bit, cả MSVC và MinGW. Phiên bản hiện tại (2.9.1) đã được phát hành chỉ một tháng trước, do đó dự án được duy trì tích cực. Ngoài ra còn có một fork on github với một số bản sửa lỗi trong dự án MSVC2010.

Nếu C++ cũng là một lựa chọn, tôi sẽ chọn tăng, bởi vì nó là nơi mà c tiêu chuẩn ++ tiến hóa (thiết kế của std::thread trong C++ 11 là một quá trình tiến hóa từ boost::thread, vv)

Đối với mạng một phần của câu hỏi của bạn, boost::asio là lựa chọn tốt nhất nếu C++ là OK cho bạn, nếu không không thấy bất kỳ thứ gì có thể so sánh được trong C. Cụ thể, boost::asio hỗ trợ I/O Completion Ports (IOCP) trên Windows, điều này rất quan trọng đối với hiệu suất. boost::asio đòi hỏi một chút thời gian để tìm hiểu, nhưng theo ý kiến ​​cá nhân của tôi nó có giá trị mỗi phút dành để đọc tài liệu (tuyệt vời) và làm việc với các ví dụ.

1

Bạn có thể thử sử dụng Qt (C++) làm trình bao bọc, nó có các thư viện đa nền tảng cho luồng và mạng; trừ khi dự án của bạn phải là 100% C.

1

Bạn có thể sử dụng tăng (C++): asio - cho đầu ra đầu vào asinchronous, threads - cho nền tảng luồng độc lập

+1

Anh ấy nói C, chứ không phải C++. Nếu không, tăng là tốt. –

+0

Xin lỗi, sai lầm của tôi. – Eugene

0

Có một lớp C++ gọi là XP đề trên codeproject. http://www.codeproject.com/Articles/15983/Cross-Platform-Threads
Bạn cần phải thay đổi ifdef từ mach để ifndef win32/64

tôi đã sử dụng nó cho aimbot OpenArena tôi, hướng dẫn bao gồm các XP-Chủ đề lớp chỉnh sửa: http://aimbots.net/tutorials/19992-audio-killspam.html

Tất cả bạn cần làm là de- "phân loại" nó để sử dụng trong C.

Bạn có thể xem kết quả cuối cùng đây, btw: :)
http://www.youtube.com/watch?v=nyJ8aM52ykE

1

Chuẩn C mới, C11, đi kèm với hỗ trợ chỉ. AFAIK không có C11 trên mạng, tuy nhiên, nhưng có các cài đặt (trình bao bọc) của phần luồng. Trên các hệ thống POSIX, bạn có thể sử dụng trình bao bọc của tôi trong P99 trên đầu trang trên pthread, điều này sẽ cung cấp cho bạn Linux và Mac. Trên các hệ thống Windows, có ít nhất việc triển khai tham chiếu từ Dinkumware đã dẫn đến API như được định nghĩa trong tiêu chuẩn.

Sử dụng C11 sẽ cung cấp cho bạn API luồng thống nhất "chứng minh trong tương lai".

Đối với ổ cắm, hiển thị của tôi là giao diện socket BSD cũng được cung cấp tương đối trực tiếp trong cửa sổ, nhưng tôi không có kinh nghiệm lập trình trên nền tảng đó.

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