Ich habe gerade begonnen, Apple's Thread-Programmieranleitung zu lesen.
Ich fange einen Thread und habe einen Verweis darauf(iphone) Wie runloop richtig hier einrichten? viele Fragen
self.myThread = [[NSThread alloc] initWithTarget: self
selector: @selector(myThreadMain)
object: nil];
[self.myThread start];
und der thread sieht aus wie Beispielcode aus dem doc.
Ich werde "exitNow" Variable im Code vom Hauptthread ändern müssen, um diesen Thread zu beenden, aber weiß nicht wie.
myThreadMain Schleife muss schlafen, wenn es keine Arbeit ausführt, aber auch nicht wissen, wie es implementiert wird.
Das Dokument sagt, ich brauche mindestens eine Eingabequelle, wenn der neue Thread nicht sofort stirbt, aber der neue Thread benötigt nur "Exit jetzt Nachricht" und performSelector: onThread: Anruf zu erhalten.
Sollte ich eine Eingabequelle einrichten?
- (void) myThreadMain
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
BOOL exitNow = NO;
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
// Add the exitNow BOOL to the thread dictionary.
NSMutableDictionary* threadDict = [[NSThread currentThread] threadDictionary];
[threadDict setValue:[NSNumber numberWithBool:exitNow] forKey:@"ThreadShouldExitNow"];
// Install an input source.
// [self myInstallCustomInputSource];
while (!exitNow)
{
// Do one chunk of a larger body of work here.
// Run the run loop but timeout immediately if the input source isn't waiting to fire.
[runLoop runUntilDate:[NSDate date]];
// Check to see if an input source handler changed the exitNow value.
exitNow = [[threadDict valueForKey:@"ThreadShouldExitNow"] boolValue];
}
[pool release];
}
Ich bin von
performSelector:onThread:withObject:
der Wähler auf diesen Thread einige Arbeitsplätze zur Hand gehen ausführen müssen, wie folgend, definiert werden
aber auch nicht wissen, wie dies zu erreichen, .
- (void) selectorToPerformInThread
{
for(int i = 0; i < 10; ++i)
{
do something;
**if(received a new "selectorToPerformInThread" call
when we are still in this loop)
break out and let the new "selectorToPerformInThread"
in order to run from the beginning of loop**
}
}
Das ist eine Menge von Fragen ist ...
Lassen Sie mich meine Fragen wiederholen.
- Wie wird die Variable "exitNow" eingestellt, die in threadDict gespeichert wird?
- Wie wird der Thread so eingerichtet, dass er schläft, wenn keine Arbeit ausgeführt wird (wenn der Selektor nicht ausgeführt wird).
- Sollte ich eine Eingabequelle einrichten, damit der Thread nicht sofort stirbt?
- Wie run loop einrichten, so dass bei jedem Aufruf von "performSelector" der selbe Selektor (wenn er ausgeführt wird) abgebrochen wird und von Anfang an ausgeführt wird?
Vielen Dank im Voraus.
so haben Sie diese herausgefunden? Wenn Sie Ihren Code teilen oder auf einige nützliche Tutorials hinweisen können, wäre das großartig. – abbood