中止库操作?

问题描述

我正在使用第三方库,它有一个方法

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 (将#修改为@)