void Glcd::Sendbytes(char cmd,char *data,unsigned int len) { if(!Can_use_lcd)//LCDセマフォロックしてない時 { MySemop(LOCK); Base::Sendbytes(cmd,data,len); MySemop(UNLOCK); } else //すでにロックしてる時 Base::Sendbytes(cmd,data,len); }
void Glcd::Sendbyte(char cmd,uchar data) { if(!Can_use_lcd)//LCDセマフォロックしてない時 { MySemop(LOCK); Base::Sendbyte(cmd,data); MySemop(UNLOCK); } else //すでにロックしてる時 Base::Sendbyte(cmd,data); }
void Glcd::SendData_RGB565(char *data,int num) { if(!Can_use_lcd)//LCDセマフォロックしてない時 { MySemop(LOCK); Base::SendData_RGB565(data,num); MySemop(UNLOCK); } else //すでにロックしてる時 Base::SendData_RGB565(data,num); }
void Glcd::Draw_rectangle(uchar x,uchar y,uchar w,uchar h, uchar *rgb) { if(!Can_use_lcd)//LCDセマフォロックしてない時 { MySemop(LOCK); Base::Draw_rectangle(x,y,w,h,rgb); MySemop(UNLOCK); } else //すでにロックしてる時 Base::Draw_rectangle(x,y,w,h,rgb); }
Glcd::~Glcd() { unsigned char rgb[3]={200,200,200}; if(!Can_use_lcd)//LCDセマフォロックしてない時 { MySemop(LOCK); Base::Draw_rectangle(0,0,get_lcd_H(),get_lcd_W(),rgb); MySemop(UNLOCK); } else //すでにロックしてる時 Base::Draw_rectangle(0,0,get_lcd_H(),get_lcd_W(),rgb); //このインスタンスがセマフォ集合を作ったのなら解放する if(Is_Created_sem) { if(semctl(semid,0,IPC_RMID,ctl_arg)==-1) { perror("In Glcd class : semctl rm error"); exit(1); } } }
void child2(int semid) { char buff[1024]; printf("子プロセス2開始\n"); MySemop(semid, CHILD2, LOCK); MySemop(semid, CHILD1, UNLOCK); if((fp = fopen(file, "r")) == NULL) { perror("子プロセス2 "); exit(EXIT_FAILURE); } printf("子プロセス2:ファイルの内容を表示します\n"); while(fgets(buff, 1024, fp) != NULL) { printf("%s", buff); } fclose(fp); printf("子プロセス2終了\n"); exit(EXIT_SUCCESS); }
void child1(int semid) { int line_cnt; printf("子プロセス1開始\n"); if((fp = fopen(file, "w")) == NULL) { perror("子プロセス1 "); exit(EXIT_FAILURE); } for(line_cnt = 1; line_cnt <= 5; ++line_cnt) { fprintf(fp, "子プロセス1のメッセージ%d\n", line_cnt); sleep(1); } fclose(fp); MySemop(semid, CHILD2, UNLOCK); MySemop(semid, CHILD1, LOCK); printf("子プロセス1終了\n"); exit(EXIT_SUCCESS); }