|
本帖最后由 cqqjj3887 于 2013-6-26 15:17 编辑
TQ-lkp 发表于 2013-6-25 16:35
把你的代码贴上来看下
下面是线程函数的内容
void *thread_function(void *arg)
{
close_thread_flag=0;
pthread_testcancel();
res=pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
if(res!=0)
{
perror("pthread_setcancelstate falied\n");
}
res=pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);
if(res!=0)
{
perror("pthread_setcanceltype falied\n");
}
while(!close_thread_flag)
{
usleep(100);
/*打开文本文件存储数据*/
strcpy(path,path_head);//复制sd卡路径到path数组
time(&rawtime);//获取系统时间
timeinfo=localtime(&rawtime);
year=timeinfo->tm_year-100;
timeinfo->tm_mon=timeinfo->tm_mon+1;
//printf("%d.%d.%d %d:%d:%d ",year,timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
a1=year/10;
a2=year%10;
switch(a1)
{
case 0: path_body[0]=48;break;
case 1: path_body[0]=49;break;
case 2: path_body[0]=50;break;
case 3: path_body[0]=51;break;
case 4: path_body[0]=52;break;
case 5: path_body[0]=53;break;
case 6: path_body[0]=54;break;
case 7: path_body[0]=55;break;
case 8: path_body[0]=56;break;
case 9: path_body[0]=57;break;
default:break;
}
switch(a2)
{
case 0: path_body[1]=48;break;
case 1: path_body[1]=49;break;
case 2: path_body[1]=50;break;
case 3: path_body[1]=51;break;
case 4: path_body[1]=52;break;
case 5: path_body[1]=53;break;
case 6: path_body[1]=54;break;
case 7: path_body[1]=55;break;
case 8: path_body[1]=56;break;
case 9: path_body[1]=57;break;
default:break;
}
a1=timeinfo->tm_mon/10;
a2=timeinfo->tm_mon%10;
switch(a1)
{
case 0: path_body[2]=48;break;
case 1: path_body[2]=49;break;
case 2: path_body[2]=50;break;
case 3: path_body[2]=51;break;
case 4: path_body[2]=52;break;
case 5: path_body[2]=53;break;
case 6: path_body[2]=54;break;
case 7: path_body[2]=55;break;
case 8: path_body[2]=56;break;
case 9: path_body[2]=57;break;
default:break;
}
switch(a2)
{
case 0: path_body[3]=48;break;
case 1: path_body[3]=49;break;
case 2: path_body[3]=50;break;
case 3: path_body[3]=51;break;
case 4: path_body[3]=52;break;
case 5: path_body[3]=53;break;
case 6: path_body[3]=54;break;
case 7: path_body[3]=55;break;
case 8: path_body[3]=56;break;
case 9: path_body[3]=57;break;
default:break;
}
a1=timeinfo->tm_mday/10;
a2=timeinfo->tm_mday%10;
switch(a1)
{
case 0: path_body[4]=48;break;
case 1: path_body[4]=49;break;
case 2: path_body[4]=50;break;
case 3: path_body[4]=51;break;
case 4: path_body[4]=52;break;
case 5: path_body[4]=53;break;
case 6: path_body[4]=54;break;
case 7: path_body[4]=55;break;
case 8: path_body[4]=56;break;
case 9: path_body[4]=57;break;
default:break;
}
switch(a2)
{
case 0: path_body[5]=48;break;
case 1: path_body[5]=49;break;
case 2: path_body[5]=50;break;
case 3: path_body[5]=51;break;
case 4: path_body[5]=52;break;
case 5: path_body[5]=53;break;
case 6: path_body[5]=54;break;
case 7: path_body[5]=55;break;
case 8: path_body[5]=56;break;
case 9: path_body[5]=57;break;
default:break;
}
/*-------按日期创建文本文件------*/
if(text_open_flag==false)
{
strcat(path,path_body);
strcat(path,path_last);
if((Data_store=fopen(path,"a+"))!=NULL)
text_open_flag=true;
strcpy(last_path_body,path_body);
#ifdef debug
printf("create txt\n");
#endif
}
if(strcmp(last_path_body,path_body)!=0)
{
strcpy(last_path_body,path_body);
strcat(path,path_body);
strcat(path,path_last);
if(text_open_flag==true)
{
fclose(Data_store);
text_open_flag=false;
}
if(text_open_flag==false)
{
if((Data_store=fopen(path,"a+"))==NULL)
text_open_flag=true;
}
}
if((Ant1_Selected_flag==true&&(A1_S1==true||A1_S2==true||A1_S3==true||A1_S4==true||A1_S5==true||A1_S6==true))
||(Ant2_Selected_flag==true&&(A2_S1==true||A2_S2==true||A2_S3==true||A2_S4==true||A2_S5==true||A2_S6==true))
||(Ant3_Selected_flag==true&&(A3_S1==true||A3_S2==true||A3_S3==true||A3_S4==true||A3_S5==true||A3_S6==true))
||(Ant4_Selected_flag==true&&(A4_S1==true||A4_S2==true||A4_S3==true||A4_S4==true||A4_S5==true||A4_S6==true)))
fprintf(Data_store,"%d.%d.%d %d:%d:%d ",year,timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
if(Ant1_Selected_flag==true)
{
if(A1_S1==true)
{
Write_flag=write(Serial_fd,serial_ouput_A1_S1,2);
printf("write %d\n",Write_flag);
usleep(100);
nread=read(Serial_fd,buff,8);
if(nread>0)
{
freq[0]=buff[3];
freq[1]=buff[2];
freq[2]=buff[1];
freq[3]=buff[0];
power[0]=buff[7];
power[1]=buff[6];
power[2]=buff[5];
power[3]=buff[4];
Freq=(float*)freq;
Power=(int*)power;
freq_value_a1=*Freq;
freq_value_a1=freq_value_a1*1000;
power_value_a1=*Power;
fprintf(Data_store,"A1 %5.1f %d ",freq_value_a1,power_value_a1);
printf("A1_S1 Freq value=%f\n",freq_value_a1);
printf("A1_S1 Power value=%d\n",power_value_a1);
sprintf(cc,"%5.1f",freq_value_a1);
string_freq_a1.assign(cc);
qstring_freq_a1=QString::fromLocal8Bit(string_freq_a1.c_str());
sprintf(dd,"%d",power_value_a1);
string_power_a1.assign(dd);
qstring_power_a1=QString::fromLocal8Bit(string_power_a1.c_str());
for(int i=0;i<nread;i++)
{
printf("%x ",buff);
}
printf("A1_S1 read %d\n",nread);
}
else
{
qstring_freq_a1="no data";
qstring_power_a1='0';
power_value_a1=0;
printf("A1_S1 read %d\n",nread);
}
}
if(A1_S2==true)
{
Write_flag=write(Serial_fd,serial_ouput_A1_S2,2);
printf("write %d\n",Write_flag);
usleep(100);
nread=read(Serial_fd,buff,8);
if(nread>0)
{
freq[0]=buff[3];
freq[1]=buff[2];
freq[2]=buff[1];
freq[3]=buff[0];
power[0]=buff[7];
power[1]=buff[6];
power[2]=buff[5];
power[3]=buff[4];
Freq=(float*)freq;
Power=(int*)power;
freq_value_a2=*Freq;
freq_value_a2=freq_value_a2*1000;
power_value_a2=*Power;
fprintf(Data_store,"A2 %5.1f %d ",freq_value_a2,power_value_a2);
printf("A1_S2 Freq value=%f\n",freq_value_a2);
printf("A1_S2 Power value=%d\n",power_value_a2);
sprintf(cc,"%5.1f",freq_value_a2);
string_freq_a2.assign(cc);
qstring_freq_a2=QString::fromLocal8Bit(string_freq_a2.c_str());
sprintf(dd,"%d",power_value_a2);
string_power_a2.assign(dd);
qstring_power_a2=QString::fromLocal8Bit(string_power_a2.c_str());
for(int i=0;i<nread;i++)
{
printf("%x ",buff);
}
printf("A1_S2 read %d\n",nread);
}
else
{
qstring_freq_a2="no data";
qstring_power_a2='0';
power_value_a2=0;
printf("A1_S2 read %d\n",nread);
}
}
.......//其他的还有22个类似的发送接收代码,并存储数据到文本文件中
}//while循环结束
if(text_open_flag==true)
fclose(Data_store);
text_open_flag=false;
if(serial_open_flag==1)
::close(Serial_fd);//关闭串口
pthread_cancel(a_thread);
return 0;
}线程函数到此结束
|
|