zthread学习 实例二

#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()退出时,先进行现场的清理工作,以此来达到线程的安全退出。

你可能感兴趣的:(thread,exception,String,delete,include,任务)