00001 #include "../../SharedMemory/SMcommon.h"
00002 #include <iostream>
00003 #include <time.h>
00004 #include <stdio.h>
00005
00006 class DataTaking{
00007 private:
00008 SharedMemory sm;
00009 int shd_param_id;
00010 struct SHM_PARAM *param_ptr;
00011 double *data_ptr;
00012 key_t key;
00013 char *fmttm(char *buf , struct tm *st);
00014
00015 time_t t;
00016 struct tm* ltm;
00017 char s[50];
00018
00019
00020 public:
00021 int ShMemory();
00022 void run();
00023 void start_time();
00024
00025 };
00026
00027 int DataTaking::ShMemory(){
00028
00029 key = ftok("viewer",PROJ_CHAR);
00030 if( key == -1 ) {
00031 perror("ftok()");
00032 return 1;
00033 }
00034 sm.shm_access(key,sizeof(struct SHM_PARAM),&shd_param_id,(int *)¶m_ptr);
00035 return 0;
00036 }
00037
00038 void DataTaking::start_time(){
00039 time(&t);
00040
00041
00042 ltm = localtime(&t);
00043 fmttm(s,ltm);
00044 printf("%s\n",s);
00045
00046 }
00047
00048 char *DataTaking::fmttm(char *buf , struct tm *st){
00049 char *a[7] = {"sun","man","tue","wed","the","fri","sat",};
00050
00051 sprintf(buf,"start [%d/%d/%d (%s) %02d:%02d:%02d]",
00052 st->tm_year +1900,
00053 st->tm_mon +1,
00054 st->tm_mday,
00055 a[st->tm_wday],
00056 st->tm_hour,
00057 st->tm_min,
00058 st->tm_sec);
00059
00060 sprintf(param_ptr->StartTime,"%d / %d / %d (%s) %02d:%02d:%02d",
00061 st->tm_year +1900,
00062 st->tm_mon +1,
00063 st->tm_mday,
00064 a[st->tm_wday],
00065 st->tm_hour,
00066 st->tm_min,
00067 st->tm_sec);
00068 return buf;
00069
00070 }
00071
00072 void DataTaking::run(){
00073 ShMemory();
00074 sm.shm_initialize(key,sizeof(struct SHM_PARAM), &shd_param_id, (int *)¶m_ptr);
00075 param_ptr->shd_param_id = shd_param_id;
00076 param_ptr->nEvent=0;
00077 param_ptr->nOverFlow=0;
00078
00079 start_time();
00080
00081
00082 std::cout<<param_ptr->StartTime<<std::endl;
00083
00084
00085 while(1){
00086 param_ptr->nEvent++;
00087 int eve;
00088 eve=rand()%280;
00089 if(eve<250)param_ptr->Hist[eve]++;
00090 else if(eve>250)param_ptr->nOverFlow++;
00091 std::cout<<"eve = "<<eve<<" ";
00092 std::cout<<param_ptr->nEvent<<" "<<param_ptr->nOverFlow<<std::endl;
00093 if( param_ptr->status == FIN )break;
00094 if( param_ptr->status == PAUSE )std::cout<<"Pause "<<std::endl;
00095 if( param_ptr->status == RESTART );
00096
00097 sleep(1);
00098 }
00099 sm.erase_shm(param_ptr);
00100
00101
00102 }
00103
00104 int main(int argc, char **argv)
00105 {
00106 DataTaking dt;
00107 dt.run();
00108
00109
00110 }