Moin,
In meinem Programm ist ein NSMutableArray mein Distributed Object, mit dem ich mehrere NSStrings vom Hauptthread in einen Subthread weiterreiche(n will).
Ich habe damit leider noch keine Erfahrungen, aber mit Hilfe eines Beispieles habe ich folgenden Code geschrieben:
Alles anzeigen
Alles anzeigen
getEingabe im Subthread überprüft, ob es neue Eingaben im orderBuffer gegeben hat, und speichert dann den ersten NSString aus dem NSMutableArray in newOrder.
Leider funktioniert das nur in ca 99% aller Fälle: Hin und wieder, und (scheinbar) völlig willkürlich und nicht reproduzierbar, werden auf diese Weise Texte verstümmelt. Meistens fehlt der hintere Teil des Textes. Es ist aber auch schon passiert, dass nur noch unsichtbare Sonderzeichen übrig geblieben sind.
Hat jemand eine Idee, woran das liegen könnte ? Was fehlt meinem DO, um mir ein zuverlässiger Helfer sein zu können ?
Für Tips wirklich sehr dankbar,
Lur
In meinem Programm ist ein NSMutableArray mein Distributed Object, mit dem ich mehrere NSStrings vom Hauptthread in einen Subthread weiterreiche(n will).
Ich habe damit leider noch keine Erfahrungen, aber mit Hilfe eines Beispieles habe ich folgenden Code geschrieben:
Quellcode
Quellcode
- char *newOrder = "";
- - (id)init
- {
- …
- orderBuffer = [[NSMutableArray alloc] initWithCapacity:1];
- …
- }
- - (void)threadStart
- {
- threadReceivePort = [[NSPort port] retain];
- threadSendPort = [[NSPort port] retain];
- appkitConnection = [[NSConnection alloc] initWithReceivePort:threadSendPort sendPort:threadReceivePort];
- [appkitConnection setRootObject:orderBuffer];
- [orderBuffer addObject:@"example text"]; // im orderBuffer werden nur NSStrings gesichert
- [NSThread detachNewThreadSelector:@selector(newThread) toTarget:self withObject:nil];
- }
- // Subthread
- - (void)newThread
- {
- NSAutoreleasePool *localPool;
- localPool = [[NSAutoreleasePool alloc] init];
- serverConnection = [NSConnection connectionWithReceivePort:threadReceivePort sendPort:threadSendPort];
- doSomething();
- [localPool release];
- }
- // irgendwann in doSomething() wird der orderBuffer überprüft, und gegebenenfalls holt sich newOrder das erste Objekt (einen NSString)
- - (void)getEingabe
- {
- id appkitProxy;
- appkitProxy = [serverConnection rootProxy];
- if ([appkitProxy count])
- {
- newOrder = (char *)[[appkitProxy objectAtIndex:0] UTF8String];
- }
- }
getEingabe im Subthread überprüft, ob es neue Eingaben im orderBuffer gegeben hat, und speichert dann den ersten NSString aus dem NSMutableArray in newOrder.
Leider funktioniert das nur in ca 99% aller Fälle: Hin und wieder, und (scheinbar) völlig willkürlich und nicht reproduzierbar, werden auf diese Weise Texte verstümmelt. Meistens fehlt der hintere Teil des Textes. Es ist aber auch schon passiert, dass nur noch unsichtbare Sonderzeichen übrig geblieben sind.
Hat jemand eine Idee, woran das liegen könnte ? Was fehlt meinem DO, um mir ein zuverlässiger Helfer sein zu können ?

Für Tips wirklich sehr dankbar,
Lur
