2010-06-04 21 views
8

OK: Tôi đang triển khai Chia sẻ tệp trong ứng dụng iPhone OS và tất nhiên điều này có nghĩa là giám sát hệ thống tệp. Yay!Cách tối ưu để theo dõi những thay đổi trong một thư mục có kqueue() là gì?

Về cơ bản, bản sao OS và/hoặc xóa từ và đến thư mục tôi có thể truy cập khi người dùng thao tác các tệp vào phần ứng dụng của tôi trong iTunes. Vì vậy, tôi cần phải theo dõi các thư mục cho những thay đổi có lẽ thông qua một cơ chế hiệu quả như một kqueue().

Làm cách nào để triển khai điều này để tôi biết rằng các tệp đã sao chép xong? Tôi đã suy nghĩ theo các dòng:

  • Màn hình với kqueue().
  • Tại sự kiện, hãy bắt đầu (hoặc đặt lại hiện tại) thời gian chờ.
  • Khi hết thời gian chờ, hãy làm việc.

nhưng có cách nào tốt hơn để làm điều đó đảm bảo rằng tôi không bước qua các ngón chân của hệ điều hành?

Trả lời

3

Đây chỉ là câu trả lời một phần, nhưng có thể hơi hữu ích.

  1. Cơ chế kqueue thực sự hoạt động như một phương tiện để được thông báo khi thư mục Documents của ứng dụng được sửa đổi.

  2. Thông báo xuất hiện ngay khi thư mục được sửa đổi và trước khi sao chép xong một tệp. Tôi đã quan sát điều này trong thử nghiệm.

Thật không may, không có hình thức thông báo khi bản sao được thực hiện. Ít nhất, không có gì mà tôi đã tìm thấy.

Điều tôi hy vọng Apple sẽ nhận ra là cần phải có thông báo cho "đồng bộ iTunes" được thực hiện, bởi vì điều này có vẻ là một vấn đề chung.

Kiểm tra vòng lặp nếu thời gian sửa đổi của tệp mới không thay đổi có thể hoạt động, nhưng hầu hết thời gian. Trong một số trường hợp cực đoan, iOS có thể tạm dừng để làm tất cả các loại công việc tốn thời gian của riêng nó trong nền.

Nếu có cách kiểm tra xem một tệp cụ thể có được mở bởi một quy trình khác không, thì điều này là đủ.

Geoff

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