【问题标题】:Native thread never get processor time when AudioRecord running当 AudioRecord 运行时,本机线程永远不会获得处理器时间
【发布时间】:2013-02-12 01:07:37
【问题描述】:

我正在申请一些语音处理。语音录制使用 Android AudioRecord 类。 AudioRecord 实例被放入服务中。一个单独的线程用于调用AudioRecord 类的read() 方法(SO 上有足够的示例)。读取的样本被转发到我的本机代码以进行进一步处理,并将它们放入某个队列中。在本机代码中,一个线程正在执行处理。问题是这个线程永远不会得到处理器时间。 在完成我的应用程序后,我调用了一些函数来清理我的原生资源。但是碰巧整个清洁过程还没有完成(我使用调用建立了它)。当我再次启动应用程序时,我的本机处理已启动(尚未开始读取新样本)。

读取线程是否可能只为自己使用处理器?我可以为我的本机(处理器)线程设置更高的优先级吗?或者可能是其他问题。

我什至尝试过使用AudioRecord.OnRecordPositionUpdateListeneronPeriodicNotification,但没有成功。

【问题讨论】:

  • 您是否尝试过附加执行处理的本机线程,看看这是否让它被安排?你有多少本机线程在工作?你如何附加访问队列的那个?
  • 我只有一个本地线程。我没有附加访问队列的线程,因为我没有来自 java 代码的任何信息。我​​为什么要这样做?

标签: multithreading android-ndk android-audiorecord


【解决方案1】:

我找到了解决方案。这是我移植的库中的错误。处理块之一调用sleep 方法。这个库最初是在windows下使用的,睡眠时间以毫秒为单位。移植后,此时间以秒为单位。所以我的本地线程休眠了 50 秒而不是 50 毫秒。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多