Hallo zusammen.
Ich checke wiedermal etwas nicht. Vielleicht hab ihr eine Idee.
Ich rufe eine Methode einer anderen Klasse auf beispielsweise ([netzwerkTransfer sendeDaten: @"Hallo"];) und möchte als Rückgabewert haben ob die Daten erfolgreich gesendet worden sind.
Das Problem ist, dass nicht "sendeDaten" den wert zurücksenden soll sondern ein Streamevent das irgendwann in den nächsten paar Sekunden auslöst.
Jetzt könnte ich am Ende von sendeDaten eine While Anweisung platzieren die ständig abfragt ob Daten vorhanden sind aber das ist irgendwie nicht cpu schonend.
In Visual Studio gibt sowas wie Threading.Thread.sleep(x) den man in einer While Anweisung platziert und somit die CPU weniger belastet.
Habt Ihr eine Idee?
Alles anzeigen
Ich checke wiedermal etwas nicht. Vielleicht hab ihr eine Idee.
Ich rufe eine Methode einer anderen Klasse auf beispielsweise ([netzwerkTransfer sendeDaten: @"Hallo"];) und möchte als Rückgabewert haben ob die Daten erfolgreich gesendet worden sind.
Das Problem ist, dass nicht "sendeDaten" den wert zurücksenden soll sondern ein Streamevent das irgendwann in den nächsten paar Sekunden auslöst.
Jetzt könnte ich am Ende von sendeDaten eine While Anweisung platzieren die ständig abfragt ob Daten vorhanden sind aber das ist irgendwie nicht cpu schonend.
In Visual Studio gibt sowas wie Threading.Thread.sleep(x) den man in einer While Anweisung platziert und somit die CPU weniger belastet.
Habt Ihr eine Idee?
Quellcode
- - (void) sendeDaten: (NSString*) nachricht {
- daten = nil;
- [self initNetworkCommunication];
- NSString *response = [NSString stringWithFormat:@"%@", nachricht];
- NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
- [outputStream write:[data bytes] maxLength:[data length]];
- }
- - (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
- NSLog(@"stream event %i", streamEvent);
- switch (streamEvent) {
- case NSStreamEventHasBytesAvailable:
- if (theStream == inputStream) {
- uint8_t buffer[1024];
- int len;
- while ([inputStream hasBytesAvailable]) {
- len = [inputStream read:buffer maxLength:sizeof(buffer)];
- if (len > 0) {
- NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
- if (nil != output) {
- //Hier sollte der String Wert zurückgegeben werden
- }
- }
- }
- }
- break;
- case NSStreamEventErrorOccurred:
- NSLog(@"Can not connect to the host!");
- break;
- case NSStreamEventEndEncountered:
- [theStream close];
- [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- [theStream release];
- theStream = nil;
- break;
- default:
- NSLog(@"Unknown event");
- }
- }