2012-01-31 20 views
5

Qui ho una funzione che è la modalità di ascolto. questa funzione elenca qualcosa che ho ottenuto da qualche dispositivo.Si desidera implementare il timeout per una funzione in C

Qui quando la mia funzione è in modalità di ascolto, quella volta voglio creare il timeout. se non otterrò alcuna risposta da un particolare dispositivo di quanto voglio o esci da questa funzione e devo avvisare.

se durante questo periodo di timeout se riceverò risposta dal dispositivo di quanto devo continuare a lavorare e interrompere questo timeout e non ci sono limiti per completare questo lavoro in qualsiasi periodo di tempo.

Quindi, come posso implementare questa cosa per una funzione.

Qualsiasi tipo di corpo si prega di aiutarmi a implementare questa cosa con funzionalità di timeout.

+0

Penso che l'unico modo corretto per farlo è avviare un processo separato, che poi si interrompe se impiega troppo tempo. È molto difficile "fermare" il codice che è in esecuzione all'interno del processo. – Lalaland

risposta

1

Dai uno sguardo allo man 2 alarm. È possibile impostare o disattivare i segnali che verranno inviati all'applicazione dopo un certo periodo di tempo.

+0

C'è qualche esempio? – user1089679

3

A seconda di come si sta aspettando una risposta da questo dispositivo, la risposta alla domanda sarà diversa. Il quadro di base è:

int do_something_with_device() 
{ 
    if (!wait_for_response_from_device()) { 
     return TIMEOUT_ERROR; 
    } 
    // continue with processing 
} 

Quanto a come si sceglie di implementare wait_for_response_from_device(), beh, ogni dispositivo è diverso. Se si utilizzano prese o tubi, utilizzare select(). Se stai interfacciamento con qualcosa che richiede un ciclo busy-wait, potrebbe sembrare:

int wait_for_response_from_device() 
{ 
    time_t start = time(NULL); 
    while (time(NULL) - start < TIMEOUT) { 
     if (check_device_ready()) { 
      return 1; 
     } 
    } 
    return 0; 
} 

Naturalmente, l'attuazione di check_device_ready() sarebbe fino a voi.

+0

Qui ho una funzione che mette il mio dispositivo in modalità ascolto, perché il mio dispositivo è pronto a ricevere file da qualsiasi dispositivo tramite Bluetooth. qui sto usando la libreria obex_test per questo – user1089679

+0

Dopo un po 'di tempo se non ricevo la risposta dal dispositivo remoto significa (qualsiasi dispositivo mobile) che devo disconnetterlo e avvisare il mio server – user1089679

Problemi correlati