向高手请教程序---使用线程实现龟兔赛跑,但跑到终点程序仍不结束.求救!
编写一个程序生成两个线程(进程)模拟龟兔赛跑。兔子进程优先级高,因而跑的快,但兔子进程随机发生一些睡眠,在睡眠期间不能跑。乌龟进程优先级低,因而跑的慢,但乌龟进程不发生睡眠。程序应能用动画方式显示龟兔赛跑的进程。
源程序如下:
#include "windows.h"
#include "process.h"
#include "iostream.h"
#include "math.h"
#include "stdlib.h"
#include "conio.h"
int hare=0,tortoise=0;
char position[70];
void hareA()
{
while(1)
{//cout<<"in hareB"<<endl;
while((hare<70)&&(tortoise<70))
{
for(int i=0;i<70;i++)
position[i]='_';
position[hare]='H'; position[tortoise]='T';
hare+=3;
if ((hare==tortoise)&&(hare<70))
{
position[hare]='O';
position[hare+1]='U';
position[hare+2]='C';
position[hare+3]='H';
position[hare+4]='!';
position[hare+5]='!';
position[hare+6]='!';
}
if(hare>=70&&tortoise<70)
cout<<"\n\n\nHare wins!\n";
else if(tortoise>=70&&hare<70)
cout<<"\n\n\nTORTOLSE WINS!\n";
else if(tortoise==hare&&hare>=70)
cout<<"\n\n\nIt's a tie!!\n";
else for(i=0;i<70;i++)
cout<<position[i];
cout<<endl;
Sleep(850);
}
getch();
};
};
void tortoiseA()
{
while(1)
{//cout<<"in tortoiseB"<<endl;
while((hare<70)&&(tortoise<70))
{
for(int i=0;i<70;i++)
position[i]='_';
position[hare+1]='H'; position[tortoise+1]='T';
tortoise++;
if ((hare==tortoise)&&(hare<70))
{
position[hare+1]='O';
position[hare+2]='U';
position[hare+3]='C';
position[hare+4]='H';
position[hare+5]='!';
position[hare+6]='!';
position[hare+7]='!';
}
if(hare>=70&&tortoise<70)
cout<<"\n\n\nHare wins!\n";
else if(tortoise>=70&&hare<70)
cout<<"\n\n\nTORTOLSE WINS!\n";
else if(tortoise==hare&&hare>=70)
cout<<"\n\n\nIt's a tie!!\n";
else for(i=1;i<=70;i++)
cout<<position[i];
cout<<endl;
Sleep(80);
}
getch();
};
};
void main(void)
{
HANDLE hareB;
HANDLE tortoiseB;
DWORD threadID1;
DWORD threadID2;
cout<<"BANG!!!\n\nAND THEY'RE OFF!!!!!!\n\n\n";
// getch();
hareB=CreateThread(0,0,(LPTHREAD_START_ROUTINE)hareA,
0, CREATE_SUSPENDED,&threadID1);
if (hareB==0)
cout<<"Cannot create thread: "<<GetLastError()<<endl;
tortoiseB=CreateThread(0,0,(LPTHREAD_START_ROUTINE)tortoiseA,
0, CREATE_SUSPENDED, &threadID2);
if (tortoiseB==0)
cout<<"Cannot create thread2: "<<GetLastError()<<endl;
SetThreadPriority(hareB, THREAD_PRIORITY_NORMAL);
SetThreadPriority(tortoiseB, THREAD_PRIORITY_LOWEST);
ResumeThread(hareB);
ResumeThread(tortoiseB);
while(1);
}
在兔子到达终点时, 程序不会结束,乌龟仍会前进,直到中断乌龟进各,重新调用兔子线程时,才会结束. 但是我在乌龟的线程里面也有判断是否到达终点啊?
怎么会出现这种情况呢?该如何修改啊?
向高手请教!
求救!!!