【发布时间】:2009-02-28 22:01:08
【问题描述】:
我目前正在使用CFReadStreamHasBytesAvailable 轮询我的CFReadStream 以获取新数据。
(首先,一些背景知识:我正在做自己的线程,我不想/不需要弄乱 runloop 的东西,所以客户端回调的东西在这里并不真正适用)。
我的问题是:什么是公认的投票做法?
Apple's documentation 在这个主题上似乎没有太大帮助。
他们建议“在等待时做点别的事情”。我目前只是在做一些事情:
while(!done)
{
if(CFReadStreamHasBytesAvailable(readStream))
{
CFReadStreamRead(...) ... bla bla bla
} else {
usleep(3600); // I made this up
sched_yield(); // also made this up
continue;
}
}
usleep 和 sched_yield“足够好”吗? usleep 有一个“好”的号码可以睡觉吗?
(另外:是的,因为这是在我自己的线程中运行的,所以我可以阻止 CFReadStreamRead - 这很好,但我也在尝试阻止上传进度和下载进度,所以阻止那里不会'没有帮助...)。
任何见解将不胜感激 - 谢谢!
【问题讨论】:
-
您没有单独的线程用于上传和下载?
-
每个请求实际上都有自己的线程。
-
也许有一些我不理解的要求,但如果上传和下载分配给他们自己的线程,那么问题会消失吗?也就是说,你只有一个线程读取流,一个线程写入流,每个线程阻塞。但是你需要同步它们。
-
不需要两个线程,我可以从 ReadStream 获取我需要的所有信息(我不需要/有一个写流)。我正在从后台线程轮询 ReadStream,问题是什么是“好”的轮询方式?
标签: iphone cocoa cocoa-touch network-programming core-foundation