Tôi cần đảm bảo rằng cùng một chuỗi sẽ thực hiện các hành động khác nhau vào các thời điểm tùy ý. Đầu tiên thread cần khởi tạo một thư viện, sau đó tôi muốn thread ngủ cho đến khi công việc cần được thực hiện và khi người dùng nhập vào, tôi cần để có thể vượt qua các bộ chọn hoặc các khối để thực thi.Cách gửi bộ chọn hoặc khối tới NSRunLoop để thực hiện?
Làm cách nào để thiết lập NSRunLoop để ngủ sau khi khởi tạo? Sau đó, làm cách nào để báo hiệu vòng lặp chạy để thức dậy và làm điều gì đó?
Tôi đã thử đọc Programming Guide Threading cho iOS, nhưng tôi muốn tránh thiết lập các lớp học như các lớp đầu vào tùy chỉnh và sử dụng một cái gì đó nhẹ hơn như performSelector:onThread:
Tôi có thể thiết lập một bộ đếm thời gian để bắn vĩnh viễn từ bây giờ để vòng lặp chạy không kết thúc?
Dưới đây là về cơ bản những gì tôi muốn trong pseudo-code:
// Initialization Code...
do {
sleepUntilSignaled();
doWorkSentToThisThread();
while (!done);
Nơi tôi gửi công việc để làm dưới dạng tin nhắn performSelector:onThread:
. Nó sẽ tốt hơn nếu tôi có thể gửi vòng lặp chạy một khối như: ^{[someObj message]; [otherObj otherMsg];}
nhưng tôi muốn được hạnh phúc với performSelector
vì tôi khá chắc chắn đó là có thể mà không cần thêm mã hóa thêm.
Cảm ơn!
Cảm ơn các mẫu mã! Ban đầu tôi đã sử dụng một hàng đợi công văn nhưng nó không tái sử dụng cùng một luồng nếu có quá nhiều thời gian giữa các công văn. –
Có, điều này đúng. Nhưng nó không thực sự quan trọng, trừ khi mã thư viện của bạn phụ thuộc vào chuỗi nó đang chạy.Điều này thường không phải là trường hợp. Ngay cả khi thư viện của bạn cho biết rằng thư viện không an toàn với chủ đề thì cũng không thành vấn đề, miễn là nó không được gọi từ nhiều hơn một luồng * cùng một lúc *. Và điều này sẽ không bao giờ xảy ra với một hàng đợi nối tiếp. – Sven
Thư viện tôi đang sử dụng là PJSUA và khi nó không xác nhận nếu nó phát hiện thấy một chuỗi gọi khác với chuỗi khởi tạo: ( –