我正在寫一個將玩Mancala的程序。這個程序包括GTK和兩個線程 - 我不相信這兩個都是問題。C - For循環做一個簡單的操作,不會增加計數器
基本上正在發生的事情是我有這種數據結構的數組:
typedef struct puds{
int x;
int y;
int count;
int flag;}PUDPOINT;
輕鬆,x和y座標,結石的數量,和相當它是計算機或用戶的標誌(0或1) 。
我創建使用這些線螺紋:
pthread_mutex_init(&mut, 0);
pthread_create(&thid, 0, (void *) movecomputer, win);
和運行這個功能:
void *movecomputer(GtkWidget *win){
int tmp;
int flagcopy;
int rndmove;
for(;;){
sleep(2);
pthread_mutex_lock(&mut);
flagcopy = thread_flag;
pthread_mutex_unlock(&mut);
if(flagcopy == COMP_MOVE){
sleep(1);
printf("Its comp's move\n");
/* Here is where the AI logic goes */
look_for_comp_move();
pthread_mutex_lock(&mut);
thread_flag = USER_MOVE;
pthread_mutex_unlock(&mut);
}
else{
printf("Its user's move\n");
}
}
}
void look_for_comp_move(){
PUDPOINT fauxpuddles[TOTAL_HOLES];
int i, k;
fprintf(stderr, "THERE SOME STUFF GOIN DOWN\n");
/* For indexes 8-13 */
for(i = 8; i <= TOTAL_HOLES; i++){
/* If there are stones to move, copy the board*/
if(puddles[i].count){
for(k = 0; k <= TOTAL_HOLES; k++){
fauxpuddles[k].x = fauxpuddles[k].x; // Don't care about X or Y
fauxpuddles[k].y = fauxpuddles[k].y;
fauxpuddles[k].count = puddles[k].count;
fauxpuddles[k].flag = puddles[k].flag;
}
//copyboard(fauxpuddles);
}
fprintf(stderr, "i:%d\n", i);
}
return;
}
其中螺旋進入一個無限循環。在最內層(k)循環中嘗試fprintf
聲明後,它顯示爲k僅從5-12開始。複製電路板在電子白板功能中,但是一直向上移動,直到我弄清楚爲什麼這種方式不起作用。
有誰知道爲什麼會發生這個問題?我相信我已經提供了相關信息。任何幫助將不勝感激!提前致謝!
什麼是'TOTAL_HOLES'的價值? – BlackVegetable
13,對不起 - 忘了提。 –