#include<iostream>
#include"osapi/osapi.h"
using namespace std;
class Buddhist : public OS_Thread
{
public:
bool quitflag;
private:
virtual int Routine()
{
for (int i = 0; !quitflag && i < 100; i++)
{
cout << "ma ni ma ni bei bei hong !" << endl;
OS_Thread::Msleep(100);
}
cout << "Task Exit !" << endl;
cout << "Save Data !" << endl;
return 0;
}
};
int main()//主线程
{
Buddhist taskMonk;
taskMonk.Run();
taskMonk.quitflag = false;
cout << "---main routine is running----" << endl;
getchar();
taskMonk.quitflag = true;//告知子线程退出
OS_Thread::Join(&taskMonk);
//Join(&taskMonk)
//等待目标线程的退出
//回收这个现成的相关系统资源
return 0;
}
改进程序,然程序更正规
#include<iostream>
#include"osapi/osapi.h"
using namespace std;
class Buddhist : public OS_Thread
{
public:
bool quitflag;
public:
void start()
{
quitflag = false;
Run();
}
void stop()
{
quitflag = true;
Join(this);
//首先通知其退出,然后等待其退出(他的退出和善候是需要一定时间的)
//Join的调用位置,不能只看字面的位置,而是要从运行时的角度来看待问题
}
private:
virtual int Routine()
{
for (int i = 0; !quitflag && i < 100; i++)
{
cout << "ma ni ma ni bei bei hong !" << endl;
OS_Thread::Msleep(100);
}
cout << "Task Exit !" << endl;
cout << "Save Data !" << endl;
return 0;
}
};
int main()//主线程
{
Buddhist taskMonk;
taskMonk.start();
cout << "---main routine is running----" << endl;
getchar();
taskMonk.stop();
return 0;
}
结束主线程之前,让子线程正常退出并做好善后工作#include<iostream>#include"osapi/osapi.h"using namespace std;class Buddhist : public OS_Thread{public: bool quitflag;private: virtual int Routine() { for (int i = 0; !quitflag && i < 100; i++) { c