00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #ifndef IMD_SIM_THREAD_H__
00022 #define IMD_SIM_THREAD_H__
00023 
00024 #include "IMDSim.h"
00025 #include "WKFThreads.h" 
00026 
00029 class IMDSimThread : public IMDSim {
00030 public:
00032   IMDSimThread(const char *, int);
00033   virtual ~IMDSimThread();
00034 
00035   virtual void get_next_ts(float *, IMDEnergies *);
00036 
00040   virtual void send_forces(int, int *, float *);
00041   virtual void pause();
00042   virtual void unpause();
00043   virtual void detach();
00044   virtual void kill();
00045   virtual void set_transrate(int);
00046 
00048   void *reader(void *);
00049 
00050 private:
00055   float *curpos, *curbuf;      
00056   float *posbuf1, *posbuf2;
00057 
00060   IMDEnergies imdEnergies; 
00061 
00067   int deadsocket;
00068   void process_coordinates(int32);
00069   void process_energies(int32);
00070   void process_mdcomm(int32);
00071 
00072   wkf_thread_t readerthread;
00073   wkf_mutex_t sockmutex;   
00074   wkf_mutex_t coordmutex;  
00075 
00078   int time2die;
00079   
00080 };
00081 
00082 #endif
00083