1

こんにちは、そのようなコードはプロセスの遅れを引き起こす可能性がありますか?

while(true)
if(!connected) break;

ご覧のとおり、常に状態をチェックしています。各反復で小さなスリープを設定すると、高速になりますか。

コードはAndroid GingerBreadで実行されます。

編集:

他のスレッドが終了するのを待ち、変数 Connected を false に設定します。変数 connected は lock のように使用されます。スレッドは通常、それが true であることを検出し、false になるのを待ちます。次にtrueに設定し、最後にのみ変更します。

4

3 に答える 3

1

次のようなことを試してください:

private Integer connected;
private ConnectedListener connectedListener;

public interface ConnectedListener {
    public void onDisconnected();
}

private void startThreads() {
    for (int i = 0; i < 10; i++) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                synchronized (connected) {
                    connected++;
                }

                // do some random long work

                synchronized (connected) {
                    connected--;
                    if (connected == 0 && connectedListener != null) {
                        //let the listener know that we are completely disconnected
                        connectedListener.onDisconnected();
                    }
                }
            }
        }).start();
    }
}
于 2013-02-28T13:18:37.500 に答える
1

私はそれが次のようになると信じています:

while(connected) {
// do stuff... 
于 2013-02-28T12:48:35.543 に答える
1

特に 1 コア プロセッサでは、他のプロセスのためにプロセッサ リソースを解放するために、ループに小さなスリープを追加する方がよいと思います。

于 2013-02-28T13:13:04.213 に答える