Mancala を再生するプログラムを書いています。このプログラムには GTK と 2 つのスレッドが含まれています。この 2 つのいずれにも問題があるとは思いません。
基本的に何が起こっているかというと、次のデータ構造の配列があります。
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 だけになるように見えます。ボードのコピーはコピーボード機能にありましたが、これが機能しない理由がわかるまで上に移動しました。
この問題が発生している理由を知っている人はいますか? 私は関連する情報を提供したと信じています。どんな助けでも大歓迎です!前もって感謝します!