- #include "stdafx.h"
- #include <iostream>
- #include <fstream>
- #include "zthread/Thread.h"
- #include "zthread/Runnable.h"
- #include "zthread/PoolExecutor.h"
- using namespace ZThread;
- using namespace std;
- class CDisplayTask : public Runnable
- {
- public:
- CDisplayTask(const string& file) :quitFlag(false)
- {
- in.open(file.c_str());
- }
- ~CDisplayTask()
- {
- in.close();
- }
- void run()
- {
- while (getline(in, line) && !quitFlag)
- {
- cout << line << endl;
- Thread::sleep(1000);
- }
- }
- void quit()
- {
- quitFlag = true;
- }
- private:
- ifstream in;
- string line;
- bool quitFlag;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- try
- {
- CDisplayTask* pTask = new CDisplayTask("ReadMe.txt");
- Thread t(pTask);
- cin.get();
- pTask->quit();
- }
- catch (Synchronization_Exception& e)
- {
- cerr << e.what() <<endl;
- }
- cin.get();
- return 0;
- }
关于任务的结束:我们有一个CDisplayTask* pTask这样的任务指针,似乎我们可以在任务结束后使用delete来终止该任务,但这样会使程序变得不可靠,因为我们在销毁任务时,它可能正在做某些重要的处理。
由任务自己决定什么时候结束是最安全的。可以设一个标志,任务循环检查该标志,从run()退出时,先进行现场的清理工作,以此来达到线程的安全退出。