qa_logger.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <core/threading/thread.h>
00028 #include <utils/system/signal.h>
00029 #include <utils/logging/console.h>
00030 #include <utils/logging/multi.h>
00031 #include <utils/logging/logger.h>
00032
00033 #include <cstdio>
00034
00035 using namespace fawkes;
00036
00037 class LoggerQAThread : public Thread
00038 {
00039 public:
00040 LoggerQAThread(const char *name, Logger *logger)
00041 : Thread(name)
00042 {
00043 this->logger = logger;
00044 i = 0;
00045 }
00046
00047 virtual void loop()
00048 {
00049 ++i;
00050 printf("%s: Testing: %i\n", name(), i);
00051 logger->log_info(name(), "Testing: %i", i);
00052 }
00053
00054 private:
00055 unsigned int i;
00056 Logger *logger;
00057 };
00058
00059
00060 class LoggerQAMain : public SignalHandler
00061 {
00062 public:
00063 LoggerQAMain()
00064 {
00065 cl = ml = NULL;
00066 t1 = t2 = t3 = t4 = t5 = t6 = NULL;
00067 }
00068
00069 ~LoggerQAMain()
00070 {
00071 delete t1;
00072 delete t2;
00073 delete t3;
00074 delete t4;
00075 delete t5;
00076 delete t6;
00077
00078 delete ml;
00079 }
00080
00081 virtual void handle_signal(int signum)
00082 {
00083 printf("Signal received, cancelling threads\n");
00084 t1->cancel();
00085 t2->cancel();
00086 t3->cancel();
00087 t4->cancel();
00088 t5->cancel();
00089 t6->cancel();
00090 printf("Threads cancelled\n");
00091 }
00092
00093 void run()
00094 {
00095 cl = new ConsoleLogger();
00096 ml = new MultiLogger(cl);
00097
00098 t1 = new LoggerQAThread("L-1-", ml);
00099 t2 = new LoggerQAThread("L-2-", ml);
00100 t3 = new LoggerQAThread("L-3-", ml);
00101 t4 = new LoggerQAThread("L-4-", ml);
00102 t5 = new LoggerQAThread("L-5-", ml);
00103 t6 = new LoggerQAThread("L-6-", ml);
00104
00105 t1->start();
00106 t2->start();
00107 t3->start();
00108 t4->start();
00109 t5->start();
00110 t6->start();
00111 t1->join();
00112 t2->join();
00113 t3->join();
00114 t4->join();
00115 t5->join();
00116 t6->join();
00117 }
00118
00119 private:
00120 Logger *cl;
00121 Logger *ml;
00122 LoggerQAThread *t1;
00123 LoggerQAThread *t2;
00124 LoggerQAThread *t3;
00125 LoggerQAThread *t4;
00126 LoggerQAThread *t5;
00127 LoggerQAThread *t6;
00128 };
00129
00130 int
00131 main(int argc, char **argv)
00132 {
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169 LoggerQAMain main;
00170 SignalManager::register_handler(SIGINT, &main);
00171 main.run();
00172 SignalManager::finalize();
00173
00174 return 0;
00175 }
00176
00177