android 传输数据丢失,Android – 丢失传入(高速)USB数据

博客讨论了在Java环境中由于后台任务如垃圾收集和线程处理导致的实时数据访问延迟问题。作者建议使用C或汇编语言编写低级别轮询函数来优化,强调接近硬件以减少不必要的系统开销。通过这种方式,可以实现更高效的实时数据读取,防止数据丢失。
摘要由CSDN通过智能技术生成

我之前遇到过这种问题。忘记使用Java,在后台它做了无数的事情,阻止实时访问,例如。垃圾收集,线程处理。还要忘记使用事件驱动编程,即使在高优先级线程,它可能需要很长时间,在事件被处理,你可以失去数据。

我修复它的方式是写“不友好”的代码!使用C或程序集,并写了一个这样的轮询函数(在类似C的伪代码中):

#define PAUSE 2 /* Check twice as often as the packet rate */

#define TIMEOUT (500 / PAUSE) /* Abort if half a second of no data */

/* Provide handle, data buffer and size of buffer

Returns TRUE if full buffer read, FALSE if not, data unread in size

*/

BOOL real_time_read(HANDLE handle, BYTE *data, size_t *size)

{

BOOL result = FALSE;

int timeout = TIMEOUT;

set_thread_priority(REALTIME);

while (is_handle_valid(handle))

{

if (is_data_pending(handle))

{

size_t count = get_data(handle, data, size);

data += count;

*size -= count;

if (!*size)

{

result = TRUE;

break;

}

}

else if (!--timeout)

break;

/* Give a tiny time slice to other processes */

usleep(PAUSE);

}

return result;

}

你提到你试过C,所以应该很直接把它转换为真正的函数。避免使用方便功能的诱惑,你希望尽可能接近金属。例如。如果一个O / S函数Read()依次调用read(),它又调用_read(),你想使用_read()。该设备将显着减慢,而这正在进行,但这是权衡的实时访问。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值