2010-08-16 21 views

Trả lời

7

Gần một năm sau, những gì bạn có thể muốn xem xét (bạn hoặc bất kỳ ai khác tìm kiếm điều này qua tìm kiếm hoặc Google) là libuv, trước đây là liboio. Trái ngược với câu trả lời được chấp nhận, nó không phải là quá nhiều mà Windows là, hoặc tại thời điểm đó, đi ra khỏi khái niệm của sự kiện i/o, nó chỉ không nổi tiếng bên ngoài vòng tròn phức tạp của kiến ​​thức sâu Windows API nhà phát triển. Trong không gian Windows, một khái niệm tương tự được thực hiện như I/O Completion Ports, do đó, nó không phải là quá nhiều mà một phiên bản libeio/port/fork/analog sẽ cần phải reimplement bánh xe, nó chỉ cần có một API libeio-tìm đến một cái gì đó đang sử dụng IOCP dưới mui xe.

1

Libeio đang sử dụng các API unix và các khái niệm unix chưa được biết đến trên thế giới Windows. Các giải pháp bạn có là:

  • sử dụng lớp trừu tượng unix trên cửa sổ: như cygwin hoặc Windows Services for Unix. Nhưng ngay cả với những lớp, bạn sẽ gặp khó khăn chạy mã libeio như có rất nhiều mã hệ thống phụ thuộc như thế này:
 
# if __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ 
# define _DIRENT_HAVE_D_TYPE /* sigh */ 
# define D_INO(de) (de)->d_fileno 
# define D_NAMLEN(de) (de)->d_namlen 
# elif __linux || defined d_ino || _XOPEN_SOURCE >= 600 
# define D_INO(de) (de)->d_ino 
# endif 
  • viết lại libeio với một thư viện trừu tượng cầm tay như GTK+ (glib trong thực tế), wxWidgets hoặc Qt. Các khung công tác đã triển khai API mạnh mẽ cho các thường trình mức thấp, các dịch vụ truyền thông, các kênh i/o và các hàng đợi không đồng bộ. Các nhà phát triển các khung công tác đó đã thực hiện rất nhiều nỗ lực để cho phép tính di động của mã của họ. Bạn không cần phải tái tạo lại bánh xe.

Chắc chắn, giải pháp thứ hai là giải pháp tốt nhất, xem xét kích thước tương đối nhỏ của eio.c, tệp C duy nhất của libeio.