Всем привет!!
Столкнулся с такой проблемой решение есть но ненравится оно мне чувствую что не надежно!Проблема заключается что pthread_detach не успевает отделить коректно созданный поток
в результате чего данные передоваемые в поток искажаются (мусор приходит)
если поставить sleep(1) то все ок иначе лажа но мне совсем не нравится решение со слипом вот пример кода
//Сдесь происходит чтение файла по позиции
while(1)
{sleep(2);
if((end_pos=lseek (fd, -1, SEEK_END)) != -1)
{
if(tmp_pos != end_pos)
{
if(pre_pos != 0){ pre_pos=pre_pos+1; }
for(i = pre_pos; i <= end_pos; i++)
{
len=lseek (fd, i, SEEK_SET);
read(fd,ch,1);
setbuf(stdout, NULL);
if(ch[0] != '\n')
{c++;
string[c-1] = ch[0];
string[c] = '\0';
}
if(ch[0] == '\n')
{
c = 0;
//printf("%s\n",string);
start_thread_jurnal(string)
bzero(string,MAS);
}
}
int start_thread_jurnal(char *string)
{
pthread_t child;
char str[strlen(string)+10];
strcpy(str,string);
if ( pthread_create(&child, NULL, Child, (void *)str) != 0 )
{
perror("Thread creation");
}else{
pthread_detach(child);
}
return 0;
}
Если поставить sleep(1) pthread_detach то вроде все ок (медленно строки обрабатывает единствинный минус - замечен)
если нету слипа то до вызова потока строка передается как надо но вызвав ее уже из потака на выходе лажа