java线程。睡眠使我的应用程序崩溃
此应用程序通过usb到串行加密狗与串行设备通信。我已经能够让它处理我的单一查询没有问题,但我有一个命令,将发送多个查询到串行设备和它似乎在我的缓冲区,如果得到超限。以下是我的部分代码:
这是我的阵列,包含20个查询命令:
String [] stringOneArray = {":000101017d", ":0001060178", ":00010B016C", ":000110017D",
":0001150178", ":00011A016C", ":00011F0167", ":0001240178", ":0001290173",
":00012E0167", ":0001330178", ":0001380173", ":00013D0167", ":0001420178",
":0001470173", ":00014C0167", ":0001510178", ":0001560173", ":00015B0167", ":0001600178"};
以下是我使用阵列的方式:
getVelocitiesButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ftDev.setLatencyTimer((byte) 16);
int z;
for (z = 0; z < 19; z++) {
String writeData = (String) stringOneArray[z];
byte[] OutData = writeData.getBytes();
ftDev.write(OutData, writeData.length());
try {
Thread.sleep(50);
} catch (InterruptedException e) { }
}
}
});
不确定代码的其余部分是否必要,但如果需要,将添加它。 所以ftdev是我的串行设备。它向串行设备发送查询命令,以字节为单位接收响应,我使用For循环构建响应,直到所有字节(每个响应31字节),然后我处理该响应,此时它应该从阵列接收第二个查询命令,依此类推,直到发送最后一个命令。。如果我允许FOR循环只发送一个或两个查询,但有更多的数组索引,那么它就崩溃了。我想我只是放慢FOR循环的速度并添加线程。睡眠,但它会冻结应用程序并崩溃。。。有什么好处?有没有其他方法来控制命令发送的速度?我宁愿尽快发送它们,但恐怕我不太懂java。到目前为止,这一直是我完成这个个人项目的主要垫脚石,我被困了两天,一直在研究和尝试解决方案
# 1 楼答案
看起来您需要睡眠约1000毫秒(确切地说是950毫秒,因为您的最后一个操作没有发送到串行设备)加上通过串行连接执行写操作所需的时间。那是一段相当长的时间,什么都不做。拆下螺纹。sleep(50)调用并将onClick的全部内容放入以下代码的run方法中:
然后,问一个不同的问题,关于快速写作会破坏你的连接