00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackWaitThreadedDriver__
00022 #define __JackWaitThreadedDriver__
00023
00024 #include "JackThreadedDriver.h"
00025 #include "JackTimedDriver.h"
00026
00027 namespace Jack
00028 {
00029
00038 class SERVER_EXPORT JackWaitThreadedDriver : public JackThreadedDriver
00039 {
00040 private:
00041
00042 struct JackDriverStarter : public JackRunnableInterface
00043 {
00044
00045 JackDriver* fDriver;
00046 JackThread fThread;
00047 volatile bool fRunning;
00048
00049 JackDriverStarter(JackDriver* driver)
00050 :fDriver(driver), fThread(this), fRunning(false)
00051 {}
00052
00053 ~JackDriverStarter()
00054 {
00055 fThread.Kill();
00056 }
00057
00058 int Start()
00059 {
00060 fRunning = false;
00061 return fThread.Start();
00062 }
00063
00064
00065 bool Execute()
00066 {
00067
00068 if (fDriver->Initialize()) {
00069 fRunning = true;
00070 } else {
00071 jack_error("Initing net driver fails...");
00072 }
00073
00074 return false;
00075 }
00076
00077 };
00078
00079 JackDriverStarter fStarter;
00080
00081 public:
00082
00083 JackWaitThreadedDriver(JackDriver* net_driver)
00084 : JackThreadedDriver(net_driver), fStarter(net_driver)
00085 {}
00086 virtual ~JackWaitThreadedDriver()
00087 {}
00088
00089
00090 bool Init();
00091 bool Execute();
00092 };
00093
00094
00095 }
00096
00097
00098 #endif