Trong ứng dụng của tôi, tôi có hai luồngGiao tiếp giữa các luồng. Làm thế nào để gửi một tín hiệu đến thread khác
- một "chủ đề chính", đó là bận rộn hầu hết thời gian
- một "bổ sung chủ đề" mà gửi ra một số yêu cầu HTTP và sẽ chặn cho đến khi nhận được phản hồi.
Tuy nhiên, phản hồi HTTP chỉ có thể được xử lý bởi chuỗi chính, vì nó dựa trên bộ nhớ cục bộ và các chức năng không an toàn.
Tôi đang tìm cách cho biết chuỗi chính khi nhận được phản hồi HTTP và dữ liệu tương ứng. Các chủ đề chính nên bị gián đoạn bởi các chủ đề bổ sung và xử lý các phản ứng HTTP càng sớm càng tốt, và sau đó tiếp tục làm việc từ điểm mà nó bị gián đoạn trước đó.
Một cách tôi có thể nghĩ về là thread thêm tạm ngưng các chủ đề chính sử dụng
SuspendThread
, bản TLS từ các chủ đề chính sử dụng một số lắp ráp nội tuyến, thực hiện các chức năng phản ứng xử lý bản thân và sơ yếu lý lịch các chủ đề chính sau .Một cách khác trong suy nghĩ của tôi là thiết lập điểm ngắt trên một địa chỉ cụ thể trong luồng chủ đề thứ hai, để luồng chính được thông báo khi con trỏ chỉ lệnh thứ hai bước vào điểm ngắt đó - và do đó - có đã nhận được phản hồi HTTP.
Tuy nhiên, cả hai phương pháp này dường như không độc đáo chút nào, chúng bị tổn thương ngay cả khi chỉ nghĩ về chúng và chúng trông không thực sự đáng tin cậy.
Tôi có thể sử dụng gì để làm gián đoạn chủ đề chính, nói rằng cần lịch sự và xử lý phản hồi HTTP trước khi thực hiện bất kỳ điều gì khác? Câu trả lời mà không phụ thuộc vào thư viện được đánh giá cao, nhưng tôi cũng sẽ mất một số phụ thuộc, nếu nó cung cấp một số giải pháp tốt đẹp.
Sau đây question (liên quan đến các giải pháp QueueUserAPC) đã được trả lời và giải thích rằng không có phương pháp an toàn để có một đẩy -behaviour trong trường hợp của tôi.
Bạn có thực sự cần phải "ngắt" chuỗi chính của mình không? Làm thế nào là nó xử lý anyways làm việc, từ một hàng đợi hoặc cơ chế làm việc khác? – sdg
Có, gián đoạn là những gì tôi muốn hoàn thành trong trường hợp của tôi (theo cách thức "đẩy" kiểu này. Không phải một số kiểu 'Chờ' hoặc' LookIfThereIsSomething' hoặc 'Poll'" kéo "kiểu"). Phần xử lý nhận phản hồi HTTP đã nhận được từ chuỗi thứ hai và gọi một số chức năng không an toàn cho trình thông dịch Lua sau đó. "LÀM THẾ NÀO" để nhận được thông điệp từ chuỗi thứ hai đến luồng chính có thể là một số bộ nhớ dùng chung, tuy nhiên điều này chưa được khắc phục vì tôi không biết cách để luồng thứ hai thông báo cho luồng chính mà nó sẽ xử lý ngay bây giờ . – Etan
Chủ đề chính của bạn là gì? nó có bị gián đoạn không? –