Tur*_*age 4 iphone objective-c nsthread ios
我有一个处理线程,我用它来填充数据缓冲区.在其他地方,一块硬件触发从该数据缓冲区读取的回调.然后处理线程启动并重新填充缓冲区.
当缓冲区填满时,我正在告诉线程等待:
while( [self FreeWriteSpace] < mProcessBufferSize && InActive) {
[NSThread sleepForTimeInterval:.0001];
}
Run Code Online (Sandbox Code Playgroud)
但是当我描述我在睡眠中花费了大量的CPU时间.还有更好的等待方式吗?我是否甚至关心配置文件是否说时间花在睡眠中?
睡眠时间实际上是免费的.在仪器中,查看"运行样本"而不是"所有样本".但这仍然不是一个理想的解决方案.
首先,你的睡眠间隔很疯狂.你真的需要.1μs的粒度吗?系统几乎肯定不会给你,因为处理器并不那么快.我不得不相信你可以把这个增加到.1或.01.但是,如果你能提供帮助的话,这仍然是忙碌的等待,这并不理想.
更好的解决方案是使用NSCondition.在这个线程中,等待条件,并在处理线程中,当有空间写入时触发条件.
你的命名要小心.不要使用前导大写字母命名方法(表示它是类名).并避免像这样直接访问ivars(InActive)."InActive"也是一个非常令人困惑的名字.是指系统处于活动状态(处于活动状态)还是未处于活动状态(处于非活动状态)Objective-C中的命名非常重要.编译器不会像C#和C++那样保护您.良好的命名是你保持程序运作的方式,ObjC的很多部分都依赖它.
您可能还想调查Grand Central Dispatch,它专门针对这些问题而设计.查看dispatch_async()新数据进入时的运行情况.
| 归档时间: |
|
| 查看次数: |
11087 次 |
| 最近记录: |