Autore Topic: Thread non "parte"  (Letto 516 volte)

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
Thread non "parte"
« il: 06 Maggio 2015, 17:24:49 CEST »
0
Ciao a tutti, ho un problema che ritengo piuttosto strano. In una classe java ho un thread che deve eseguire una serie di cose finché non lo interrompo, lo faccio partire con il metodo start(), ma all'esecuzione questo non parte proprio e non capisco il perché.
Vi allego il codice della classe...
Codice (Java): [Seleziona]
public class SensorActivity_2 extends SerialPortActivity implements View.OnClickListener {
    boolean AckIsCorrect;
    final Object AckIsCorrectSemaphore = new Object();
    private byte[] ack = new byte[]{0x10, 0x02, (byte) 0x00, 0x06, (byte) 0xF9, 0x10, 0x03};
    private byte[] values = new byte[]{0x10, 0x02, 0x00, 0x28, 0, 0, 0, 0x10, 0x03};//questo frame va inviato ad ogni scheda
    //gli 0 sono in ordine, valueA; valueB; CHECKSUM
    private VerticalSeekBar sb1;
    private byte[] blockToSend;

    SendingThread mSendingThread;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sensor_activity);
        mSendingThread = new SendingThread();
        mSendingThread.start();
        sb1.setOnSeekBarChangeListener(new VerticalSeekBar.OnSeekBarChangeListener() {
           /**Codice della seekbar**/
        });
    }

   private class SendingThread extends Thread {
        @Override
        public void run() {
            super.run();
            while (!isInterrupted()) {
                synchronized (AckIsCorrectSemaphore) {
                    AckIsCorrect = false;
                    try {
                        if (mOutputStream != null) {
                            mOutputStream.write(values);
                            AckIsCorrectSemaphore.wait();
                        }
                    } catch (IOException | InterruptedException e) {
                        e.printStackTrace();
                    }

                    if (AckIsCorrect)
                        Log.d("Sensor Activity_2: ", "CORRETTO");

                }
            }
        }

    }

    @Override
    protected void onDataReceived(byte[] buffer, int size) {
        synchronized (AckIsCorrectSemaphore) {
            byte[] block = getBlockFromStream(buffer, size);
            if (Arrays.equals(block, ack)) {
                AckIsCorrect = true;
                AckIsCorrectSemaphore.notify();
            } else {
                Log.d("Sensor Activity_2 ", "SBAGLIATO");
            }
        }
    }
}

In poche parole il thread dovrebbe inviare un array di byte su una porta seriale, ma il thread non parte e forse mi sto perdendo in un bicchiere d'acqua.
Qualcuno saprebbe spiegarmi il motivo per cui non va e magari un modo per sistemarlo?
Grazie in anticipo  :-)

iClaude

  • Visitatore
Re:Thread non "parte"
« Risposta #1 il: 07 Maggio 2015, 10:09:53 CEST »
0
Hai scritto che il thread non parte, ma sei sicuro di questo?
Hai provato a mettere un Log come prima istruzione del metodo run per vedere se viene eseguito?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Thread non "parte"
« Risposta #2 il: 07 Maggio 2015, 10:35:15 CEST »
0
Hai scritto che il thread non parte, ma sei sicuro di questo?
Hai provato a mettere un Log come prima istruzione del metodo run per vedere se viene eseguito?

Tenderei a "loggare" anche lo stato delle variabili che potrebbero compromettere il funzionamento: mOutputStream, AckIsCorrect, etc
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
Re:Thread non "parte"
« Risposta #3 il: 07 Maggio 2015, 16:03:12 CEST »
0
Grazie a tutti per le risposte. Ho provato come dite voi ed effettivamente il thread partiva solo che scriveva sulla porta seriale sono una volta i dati che mi servono. Ho provato a farlo anche tramite un AsyncTask però le cose non sono tanto diverse. I dati li invia una volta e poi basta si ferma ho pure provato a togliere l'istruzione wait() e così facendo dovrebbe inviare dati in continuazione e invece lo manda sempre una volta sola...

Perdonate se scrivo stupidate ma è la mia prima esperienza con le porte seriali e inizio a diventare matto  :D
« Ultima modifica: 07 Maggio 2015, 16:18:24 CEST da MasterChief »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Thread non "parte"
« Risposta #4 il: 07 Maggio 2015, 16:24:07 CEST »
0
Io non ho capito a cosa servono questi (per quello che vedo del codice potrebbero essere rimossi):
Codice (Java): [Seleziona]
 synchronized (AckIsCorrectSemaphore) {
                    AckIsCorrect = false;
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store