Witam,
Problem jaki mam to nic poważnego, bardziej chodzi o estetykę jego działania ;)
W wątku mam odczyt strumienia z "konsoli"(stdin), odebrane dane są konwertowane na inny typ i przekazane do głównego programu:
void Receiver::run(){
int len;
char * sample = (char*)malloc(SAMPLE_LEN*sizeof(char));
int * isample = (int*)malloc(SAMPLE_LEN*sizeof(int));
int i;
for(;;){
if((len=read(fileno(stdin), sample, SAMPLE_LEN*sizeof(char)))==0){
usleep(1000);
continue;
}
len /= sizeof(char);
for(i=0; i<len; i++)
isample[i] = sample[i];
this->sampleEvent(isample, len);
if(len<SAMPLE_LEN) usleep(1000*50);
}
fprintf(stderr, "thread exit\n");
}
Problem pojawia się gdy chcę wyłączyć aplikacje: "QThread: Destroyed while thread is still running"
Pomyślałem wpierw że można jakiś mądry warunek zrobić w pętli, jednak to nie wszystko... Całość blokuje mi funkcja "read" wtedy, gdy przez jakiś okres czasu nie ma danych które wysyłane są do tego programu - funkcja read czeka na jakiekolwiek pojawienie się danych inaczej "pętla" jest zablokowana. Jak taki problem rozwiązać?