पर वापस प्रेषण करें तो मेरे पास एक ऐसा एप्लिकेशन है जो असीमित घटनाओं की एक श्रृंखला को सक्रिय करता है और फिर परिणाम को बफर में लिखता है। समस्या यह है कि मैं बफर तुल्यकालिक को लिखे जाने कीस्विफ्ट 2 - आईओएस - मूल थ्रेड
कंकाल कोड के रूप में इस तरह के
let Session = NSURLSession.sharedSession()
let TheStack = [Structure]()
//This gets called asynchronously, e.g. in threads 3,4,5,6,7
func AddToStack(The Response) -> Void {
TheStack.insertAt(Structure(The Response), atIndex: 0))
if output.hasSpaceAvailable == true {
// This causes the stream event to be fired on mutliple threads
// This is what I want to call back into the original thread, e.g. in thread 2
self.stream(self.output, handleEvent: NSStreamEvent.hasSpaceAvailable)
}
}
// This is in the main loop, e.g. thread 2
func stream(aStream: NSStream, handleEvent: NSStreamEvent) {
switch(NSStreamEvent) {
case NSStreamEvent.OpenCompleted:
// Do some open stuff
case NSStreamEvent.HasBytesAvailable:
Session.dataTaskWithRequest(requestFromInput, completionHandler: AddToStack)
case NSStreamEvent.HasSpaceAvailable:
// Do stuff with the output
case NSStreamEvent.CloseCompleted:
// Close the stuff
}
}
समस्या है (धागा कि अतुल्यकालिक प्रक्रिया पैदा में) चाहते धागा कि कॉल dataTaskWithRequest
में है है धागा, कहते हैं, कई अलग अलग धागे में 3. पूरा होने हैंडलर आग और case NSStreamEvent.HasSpaceAvailable:
का कारण बनता है धागा 3 में चल रहा हो सकता है, के साथ साथ सभी धागे कि वे में ही अस्तित्व में
मेरे सवाल यह है:। मैं इसे कैसे कर सकता हूँ ताकि self.stream(self.output, handleEvent: NSStreamEvent.hasSpaceAvailable)
है थ्रेड 3 में कहा जाता है, या कभी भी मूल धागा डब्ल्यू आउटपुट चरण में एक-दूसरे के इस ट्रिपिंग को रोकने के लिए।
अग्रिम धन्यवाद!
नोट: धागा है कि इनपुट/आउटपुट हैंडलिंग शामिल NSThread.detachNewThreadSelector
साथ बनाया गया था
अपनी खुद की कतार बनाने के बारे में और अपने लेखक को उपयोग करने वाले व्यक्ति को कैसे पास किया जाए? (मैं कहता हूं "कतार" क्योंकि आपने gcd के साथ टैग किया है।) –
मैंने काम छोड़ने से लगभग 5 मिनट पहले ऐसा करने के बारे में सोचा था। थ्रेड/कतार बनाएं और उसमें सभी आउटपुट फनल करें। इस तरह यदि यहां कई धागे बुला रहे हैं, तो वे सभी एक बार निष्पादित करने की कोशिश नहीं कर रहे हैं। मैं अब मंगलवार तक बंद हूं इसलिए यदि वह मार्ग है तो मैं आपको बता दूंगा कि यह कैसे जाता है – Ajwhiteway
मेरे पास पहले से ही NSThread.detachNewThreadSelector द्वारा बनाई गई NSThread है। यह वह धागा है जिसे मुझे वापस कॉल करने की आवश्यकता है। मुझे डर है कि प्रेषण वास्तव में समस्या को खराब कर सकता है (सबकुछ समाप्त होने से पहले बंद होने वाली धाराएं) – Ajwhiteway