【发布时间】:2011-08-27 22:52:37
【问题描述】:
在我的 Cocoa 项目中,我与连接到串行端口的设备进行通信。现在,我正在等待串行设备发送一些字节的特定消息。对于读取操作(以及收到所需消息后的反应),我创建了一个新线程。应用户请求,我希望能够取消线程。
正如 Apple 在 docs 中建议的那样,我在线程字典中添加了一个标志,定期检查该标志是否已设置,如果已设置,请调用 [NSThread exit]。这很好用。
现在,线程可能会卡住等待串行设备最终发送 12 字节消息。读取调用如下所示:
numBytes = read(fileDescriptor, buffer, 12);
一旦线程开始从设备读取,但没有数据进来,我可以设置标志告诉线程完成,但线程不会读取标志,除非它最终收到至少 12 字节的数据并继续处理。
有没有办法杀死当前在串行设备上执行读取操作的线程?
编辑澄清: 我不坚持为串行设备的 I/O 操作创建单独的线程。如果有一种方法可以封装操作,以便在用户按下取消按钮时我能够“杀死”它们,我会非常高兴。 我正在为桌面 Mac OS X 开发一个 Cocoa 应用程序,因此对移动设备及其功能没有限制。 如果没有要读取的字节,解决方法是让 read 函数立即返回。我该怎么做?
【问题讨论】:
标签: objective-c c multithreading serial-port