⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chk_athread.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2004   Run check files (ck_*.cpp) concurrently in threads         Build: make chk_athread   --- Internal Note --   If building this file with WY_DEBUG defined and run, incorrect output   will result, for internal debug statistics are not thread serialized, */#include "wy_thread.h"#include "wy_uty.h"#include <cstdlib>#include <iostream>#if WY_THREAD_VERSION!=31#error Test code is for WY_THREAD_VERSION 31#endifextern void ck_str(void);extern void ck_timespec(void);extern void ck_date(void);extern void ck_chrfile(bool);extern void ck_regfile(bool,const char*);extern void ck_dirfile(void);extern void ck_num(void);extern void ck_math(void);// Run given f in thread//class TestThread : public Wy_Thread {  public:    TestThread(void (*f)(void),const char* tname)           : Wy_Thread(),_tname(tname),_chk_func(f) {};    ~TestThread() throw()           {             tmain_close();     // stop possibly active thread           };  protected:   virtual WyRet tmain(void);  private:     const char* _tname;     void (*_chk_func)(void);     static const char* chdr;};const char* TestThread::chdr=                  "--- TestThread::tmain(..) caught: --- ";WyRet TestThread::tmain(void)try { Wy::cout << "Entered ...  " << _tname << '\n'; _chk_func(); Wy::cout << "Left Ok ... ~" << _tname << '\n'; return(Ok); }catch(const WyRet& e) { Wy::cerr << chdr << _tname << '\n' <<           Wy::wrd(e) << '\n'; return(e);}catch(const std::exception& e) { Wy::cerr << chdr << _tname << '\n' <<           "std::exception" << '\n'; WY_RETURN( WyRet() );}catch(...) { Wy::cerr << chdr << _tname << '\n' <<           "unknown unwind" << '\n'; WY_RETURN( WyRet() );};static void ct_str(void){ for(int i=0; i<100; ++i) {   ck_str(); }};static void ct_timespec(void){  for(int i=0; i<8; ++i) {   ck_timespec(); }};static void ct_date(void){ for(int i=0; i<200; ++i) {   ck_date(); }};static void ct_regfile(void){ ck_regfile(false,"wytimespec.cpp"); ck_regfile(false,"wytimespec.o"); ck_regfile(false,"chk_timespec");};static void ct_chrfile(void){ for(int i=0; i<400; ++i) {   ck_chrfile(false); }};static void ct_dirfile(void){ for(int i=0; i<50; ++i) {   ck_dirfile();   Wy::sleep(WyTimeSpec(Wy_Second(),100000000));  // 0.1 secs }};static void ct_num(void){ for(int i=0; i<40; ++i) {   ck_num(); }};static void ct_math(void){ for(int i=0; i<10; ++i) {   ck_math(); }};////static const WyStr chdr(                  "+---------------+\n"                  "| main() caught:|\n"                  "+---------------+\n");int main(void) throw()try { Wy::cout << "\nChecking concurrently in threads...\n"; WyRet r; TestThread tf2(ct_str,"ck_str"); TestThread tf3(ct_date,"ck_date"); TestThread tf4(ct_regfile,"ck_regfile"); TestThread tf5(ct_chrfile,"ck_chrfile"); TestThread tf6(ct_timespec,"ck_timespec"); TestThread tf8(ct_dirfile,"ck_dirfile"); TestThread tf9(ct_num,"ck_num"); TestThread tf10(ct_math,"ck_math"); // Begin threads if((r=tf2.begin())!=Ok) {   WY_THROW(r); } if((r=tf3.begin())!=Ok) {   WY_THROW(r); } if((r=tf5.begin())!=Ok) {   WY_THROW(r); } if((r=tf4.begin())!=Ok) {   WY_THROW(r); } if((r=tf6.begin())!=Ok) {   WY_THROW(r); } if((r=tf8.begin())!=Ok) {   WY_THROW(r); } if((r=tf9.begin())!=Ok) {   WY_THROW(r); } if((r=tf10.begin())!=Ok) {   WY_THROW(r); } // Wait stopped Wy::cout << '\n'; if((r=tf2.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf3.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf5.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf4.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf6.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf8.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf9.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; if((r=tf10.wait_not(Wy_Thread::Active))!=Ok) {   WY_THROW(r); }; Wy::cout << "Checked Ok\n"; return(0);}catch(const WyRet& e) { Wy::cerr << chdr << Wy::wrd(e) << '\n'; return(-1);}catch(const std::exception& e) { Wy::cerr << chdr << "main caught(std::exception)\n"; return(-1);}catch(...) { Wy::cerr << chdr << "main caught(...)\n"; return(-1);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -