gpt4 book ai didi

java - Android 中使用 BluetoothChat 的多线程 : Wait for answer

转载 作者:行者123 更新时间:2023-12-01 13:19:22 26 4
gpt4 key购买 nike

再次需要您的帮助:我正在使用 android 的蓝牙聊天示例,并尝试实现一个等待处理程序答复的函数:

public void getOBD2Values() {

Log.d(TAG, "Before");

writeMessage("Hello");

mNastyBusyWait = true;

while(mNastyBusyWait){ //send Thread to sleep
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

Log.d(TAG, "After");
}

线程应该等待,直到处理程序收到答案:

case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
String readMessage = new String(readBuf, 0, msg.arg1);
mNastyBusyWait = false; // wake Thread up again
Log.d(TAG, "NOT IN IF :MESSAGE_READ: " + readMessage);
break;

这是一个愚蠢的忙等待方法来运行示例。据我所知,问题是线程等待,但处理程序位于同一个类中,并且从未用于继续...什么是更好的方法或者我该如何解决这个问题?我终于得到蓝牙客户端的答复了!

谢谢。

最佳答案

如果这是“一次性”锁,您可以使用 CountDownLatch:

// somewhere in init...
private final CountDownLatch latch = new CountDownLatch(1);

// waiting side...
writeMessage("hello");
latch.await();
Log.d(TAG, "After");

// waking side...

readMessage = ...;
latch.countDown();
Log.d(TAG, ...);

但是,如果您想重用锁,则必须使用信号量

另一种解决方案是在您有工作要做时使用Executor.submit() 一个新任务。

关于java - Android 中使用 BluetoothChat 的多线程 : Wait for answer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22168098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com