问题描述
secureSend(int channel,byte[] data);
此方法将我的二进制数据发送到库中,如果数据大于64K,该方法将其拆分为64K块并按顺序发送。
这个方法被标记为阻塞,所以它不会立即返回。因此,也建议每次使用此函数都生成一个线程:
new Thread(new Runnable() {
public void run() {
library.secureSend(channel,mydata);
}
}).start();
如果我尝试发送更大的数据 (>1Mb),大约需要 30 秒。这很好。
但是有时我需要中断发送,因为有更高优先级的数据要发送。
目前,如果我通过调用 secureSend
生成一个新线程,它将不得不等待,因为库以 FIFO 方式运行,即:它将首先完成之前的发送。
我反编译了库的类文件,secureSend
有如下伪算法:
public synchronized void secureSend(int c,byte[] data) {
try {
local_data = data;
HAS_MORE_DATA_TO_SEND = (local_data.length > 0)
while (HAS_MORE_DATA_TO_SEND) {
HAS_MORE_DATA_TO_SEND = sendChunk(...); //calculates offset,and length,and returns if still has more,operates with local_data!
}
} catch(IOException ex) {}
}
我试图中断线程(我已经存储了它),但没有帮助。
库在 while
循环中花费了大量时间。不过,它也怕IOException
。
我的问题:我可以中断/终止/中止这个函数调用吗?也许以某种方式将 IOException 抛出到线程中?这有点可能吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)