私のソフトウェアには、重要なレイテンシーの問題を引き起こす2つの機能があります。ソフトウェアはObjective-Cで書かれています。USBデバイスからシリアルデータを受信します。私の目標は、それらをカプセル化してから、データを処理する別のオブジェクトに送信することです。
プログラムのこのセクションでは、CPUとレイテンシの大きな問題が発生しますが、これを解決する方法がまったくわかりません。デバイスは、状態が変化したときにのみデータを送信します。したがって、多くの変化がうまく発生すると、すべてが遅延します。
- (void)getSerialData {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
[self getSerialDataLoop];
});
}
- (void)getSerialDataLoop {
readThreadRunning = YES;
char byte_buffer[2]; // buffer for holding incoming data
int numBytes=0; // number of bytes read during read
NSString *text;
// this will loop untilthe serial port closes
while(TRUE) {
// read() blocks until some data is available or the port is closed
numBytes = (int)read(serialFileDescriptor, byte_buffer, 1); // read up to the size of the buffer
if(numBytes>0) {
///text = [NSString stringWithCString:byte_buffer encoding:NSSymbolStringEncoding];
if(![text isEqualToString:@""]){
text = [NSString stringWithUTF8String:byte_buffer];
[self performSelectorOnMainThread:@selector(processNSStringData:) withObject:text waitUntilDone:YES];
}
} else {
break; // Stop the thread if there is an error
}
}
// make sure the serial port is closed
if (serialFileDescriptor != -1) {
close(serialFileDescriptor);
serialFileDescriptor = -1;
}
// mark that the thread has quit
readThreadRunning = FALSE;
}
何かアイデアやアドバイスはありますか?