我在Objective-C中编写了一个串行通信包装类。要列出所有串行可用调制解调器并设置连接,我使用的代码几乎与this example project by Apple中使用的代码相同。OSX串行读取冻结/挂起
我可以读写苹果做它的方式。但是我想在第二个线程上实现一个循环,并且如果一个NSString *writeString
的长度为0,并且如果字节可用,则在写入之后写入流。
我写得很直截了当。我刚刚使用unistd.h
中声明的write
函数。
阅读不起作用。每当我打电话read()
,函数挂起,我的循环不继续。
这里是我的循环使用的代码:
- (void)runInCOMLoop {
do {
// write
} while (bytesWritten < strlen([_writeString UTF8String]));
NSMutableString *readString = [NSMutableString string];
ssize_t bytesRead = 0;
ssize_t readB = 0;
char buffer[256];
do {
readB = read(_fileDescriptor, &buffer, sizeof(buffer));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this function hangs
bytesRead += readB;
if (readB == -1 {
// error
}
else if (readB > 0) {
if(buffer[bytesRead - 1] == '\r' ]] buffer[bytesRead - 1] == '\n') {
break;
}
[readString appendString:[NSString stringWithUTF8String:buffer]];
}
} while (readB > 0);
什么我错在这里做什么?
没有发送任何数据? –