- 论坛徽章:
- 0
|
本帖最后由 jianghong_023 于 2015-08-12 15:24 编辑
回复 6# MMMIX
实例:
// write into usb device
void *writre_devU(void *arg){
int cntw,cpsize;
cpsize = BUFFER_CACHE_20M;
float timeuse;
struct timeval tpstart,tpend;
// from cache_buff write into usb device ...
pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
while(1){
printf("first cuont %d \n",tmp_size_cuont);
pthread_mutex_lock(&shareMem_lock);
pthread_cond_wait(&cache_cond,&shareMem_lock);
if(integer_val == tmp_size_cuont)
{
cpsize = modulo_val*BUFFER_SIZE_1M;
pthread_cancel(threadWriteUdev_2cpy);
printf("finish 1\n");
initial_bus_map->map_base[(bus_intf_BASE + 6)/sizeof(unsigned char)] = initial_bus_map->bus_inttt.usb_dir; // 停止操作
pthread_cancel(thread_cache_Copy);
write(fdw, cache_buff, cpsize);
fsync(fdw);
pthread_mutex_unlock(&shareMem_lock);
break;
}else{
gettimeofday(&tpstart,NULL); // 开始计算程序运行时间
#if 1
while((cntw = write(fdw, cache_buff, cpsize)) != 0){
if(cntw < 0)
{
perror("write error");
pthread_mutex_unlock(&shareMem_lock);
break;
}
else if(cpsize == cntw)
break;
else if(cntw > 0)
{
cache_buff += cntw;
cpsize -= cntw;
}
}
#endif
}
pthread_mutex_unlock(&shareMem_lock);
gettimeofday(&tpend,NULL);
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ (tpend.tv_usec-tpstart.tv_usec);
timeuse/=1000000;
printf("\t Time : %f \n",timeuse);
//fsync(fdw);
tmp_size_cuont++;
printf("end frist \n");
}// end while
fsync(fdw);
tmp_size_cuont = 0;
resultKey = 1;
pthread_exit(NULL);
}// end void *writre_devU(void *arg)
|
|