📄 mainserv.c~
字号:
#ifndef _MAINSERV_C_#define _MAINSERV_C_ 0#include "MySHM.h"#include "Wrapper.c"#include "CircularQueue.c"#define AUTOROLLVAL_DW 2#define AUTOROLLVAL_TX 4#define AUTOROLLVAL_TXOUT 4int countDWXX=0;int tmpDWXX1=0; //Counter of DWXX in the temp file 1int tmpDWXX2=0; //Counter of DWXX in the temp file 2 int countTXIDXOut=0; //Counter of sended TXXX in file TXINDEX_OUT.dataint countTXMNOut=0; int countTXMAIN=0;int countTXINDEX=0;int tmpTXXX1=0; //Counter of TXXX in the temp file 1int tmpTXXX2=0; //Counter of TXXX in the temp file 2 int fRecords=0; //Counter of founded message numberint tidCount=0; //Counter of threads numberpthread_mutex_t countDW_Mutex;pthread_mutex_t countTXINDEX_Mutex;pthread_mutex_t countTXMAIN_Mutex;pthread_attr_t attr;pthread_t tid_DatProcess[MAXNTHREADS]; void *Delete( void *arg );/* Check if the id of a thread is out of range */void CheckTidCount( void ){ if( tidCount > MAXNTHREADS ) tidCount = 0; else tidCount++;}void PrintForTest( LOCINFO **srcArray,COMMINFO **srcArray1 ){ int j; LOCINFO **p; COMMINFO **q; if( srcArray != NULL ) { for( p= srcArray; p<=srcArray+fRecords-1; p++ ) printf("Now it is:Hour %d Min %d DESID %lX Index %d \n",(*p)->dwxx.hour,(*p)->dwxx.minute,(*p)->dwxx.srcID,(*p)->index ); } if( srcArray1 != NULL ) { for( q= srcArray1; q<=srcArray1+fRecords-1; q++ ) printf("Now it is:Hour %d Min %d SRCID %lX Index %d \n",(*q)->txIndex.hour,(*q)->txIndex.minute,(*q)->txIndex.srcID,(*q)->index ); }}int CompareLocTime( QueryFilter filter, LOCINFO **p ){ if( p == NULL ) err_sys("Error occurred-> Empty records in memory!"); printf("Time is %d %d %d\n ",(*p)->dwxx.hour,(*p)->dwxx.minute,(*p)->dwxx.second); printf("Filter stime is %d %d %d\n",filter.sTime.hour,filter.sTime.min,filter.sTime.sec); printf("Filter etime is %d %d %d\n",filter.eTime.hour,filter.eTime.min,filter.eTime.sec); /* Compare the current record with given search condition */ if( ( ((*p)->dwxx.hour >= filter.sTime.hour) && ((*p)->dwxx.hour <= filter.eTime.hour)) && (( (*p)->dwxx.minute >= filter.sTime.min) && ( (*p)->dwxx.minute <= filter.eTime.min) ) && ( ( (*p)->dwxx.second >= filter.sTime.sec) && ( (*p)->dwxx.second <= filter.eTime.sec) )) return 1; else return 0;} void ReCountMain( int value ){ Pthread_mutex_lock( &countTXMAIN_Mutex ); countTXMAIN = value; Pthread_mutex_unlock( &countTXMAIN_Mutex );}int GetCountMain( void ){ int counter; Pthread_mutex_lock( &countTXMAIN_Mutex ); counter = countTXMAIN; Pthread_mutex_unlock( &countTXMAIN_Mutex ); return counter;}int AddCountMain( int increment ){ int counter; Pthread_mutex_lock( &countTXMAIN_Mutex ); counter = countTXMAIN = countTXMAIN + increment; Pthread_mutex_unlock( &countTXMAIN_Mutex ); return counter;}int ReduceCountMain( int increment ){ int counter; Pthread_mutex_lock( &countTXMAIN_Mutex ); counter = countTXMAIN = countTXMAIN - increment; Pthread_mutex_unlock( &countTXMAIN_Mutex ); return counter;}/* Reset the count of current different message */void ResetCount( MESGTYPE mesgType, int value){ switch( mesgType ) { case TYPE_OF_DWXX: Pthread_mutex_lock( &countDW_Mutex ); countDWXX = value; Pthread_mutex_unlock( &countDW_Mutex ); break; case TYPE_OF_TXXX: Pthread_mutex_lock( &countTXINDEX_Mutex ); countTXINDEX = value; Pthread_mutex_unlock( &countTXINDEX_Mutex ); break; case TYPE_OF_ICXX: break; case TYPE_OF_ZJXX: break; case TYPE_OF_SJXX: break; case TYPE_OF_BBXX: break; case TYPE_OF_FKXX: break; } }/* Return the count of current different message in the file */int GetCount( MESGTYPE mesgType){ int counter = 0; switch( mesgType ) { case TYPE_OF_DWXX: Pthread_mutex_lock( &countDW_Mutex ); counter = countDWXX; Pthread_mutex_unlock( &countDW_Mutex ); return counter; break; case TYPE_OF_TXXX: Pthread_mutex_lock( &countTXINDEX_Mutex ); counter = countTXINDEX; Pthread_mutex_unlock( &countTXINDEX_Mutex ); return counter; break; case TYPE_OF_ICXX: break; case TYPE_OF_ZJXX: break; case TYPE_OF_SJXX: break; case TYPE_OF_BBXX: break; case TYPE_OF_FKXX: break; } Pthread_mutex_unlock( &countDW_Mutex );}/* Modify the count of current different message in the file */void AddCount( MESGTYPE mesgType,int increment){ switch( mesgType ) { case TYPE_OF_DWXX: Pthread_mutex_lock( &countDW_Mutex ); countDWXX = countDWXX + increment; Pthread_mutex_unlock( &countDW_Mutex ); break; case TYPE_OF_TXXX: Pthread_mutex_lock( &countTXINDEX_Mutex ); countTXINDEX = countTXINDEX + increment; Pthread_mutex_unlock( &countTXINDEX_Mutex ); break; case TYPE_OF_ICXX: break; case TYPE_OF_ZJXX: break; case TYPE_OF_SJXX: break; case TYPE_OF_BBXX: break; case TYPE_OF_FKXX: break; } }void ReduceCount( MESGTYPE mesgType,int decrement ){ switch( mesgType ) { case TYPE_OF_DWXX: Pthread_mutex_lock( &countDW_Mutex ); countDWXX = countDWXX - decrement; Pthread_mutex_unlock( &countDW_Mutex ); break; case TYPE_OF_TXXX: Pthread_mutex_lock( &countTXINDEX_Mutex ); countTXINDEX = countTXINDEX - decrement; Pthread_mutex_unlock( &countTXINDEX_Mutex ); break; case TYPE_OF_ICXX: break; case TYPE_OF_ZJXX: break; case TYPE_OF_SJXX: break; case TYPE_OF_BBXX: break; case TYPE_OF_FKXX: break; } }/* Store the newcomming message to Temporary file 1 or 2*/int TempStore( MESGTYPE mesgType, TMPSTOREMODE mode){ int ret; FILE *fp; struct stat buf; printf("Enter TempStore.\n"); switch( mesgType ) { case TYPE_OF_DWXX: if( mode == CREAT ) { printf("**********Add newly message to file_DWtmp1************\n"); Pthread_mutex_trylock( &fLock.DWtmp1_FLOCK); fp = Fopen( "DWtmp1.data","a+"); Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_DWXX , 1); tmpDWXX1++; printf("File DWtmp1 is %d\n",tmpDWXX1); Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK ); return 1; } else if( mode == QUERY) { if( stat( "DWtmp1.data",&buf ) == 0 ) { //file DWtmp1 exist printf("File DWtmp1 exist!\n" ); if( (ret=Pthread_mutex_trylock( &fLock.DWtmp1_FLOCK)) == EBUSY ) { //Add newly message to file_DWtmp2 Pthread_mutex_trylock( &fLock.DWtmp2_FLOCK); printf("**********Add newly message to file_DWtmp2************\n"); fp = Fopen( "DWtmp2.data","a+"); Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_DWXX , 1); tmpDWXX2++; printf("tmpDWXX2 is %d\n",tmpDWXX2); Pthread_mutex_unlock( &fLock.DWtmp2_FLOCK); return 1; } else if( ret == 0 ) { //Add newly message to file_DWtmp1 printf("**********Add newly message to file_DWtmp1************\n"); fp = Fopen( "DWtmp1.data","a+"); Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_DWXX , 1); tmpDWXX1++; printf("tmpDWXX1 is %d\n",tmpDWXX1); Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK ); return 1; } } else if( stat( "DWtmp2.data",&buf ) == 0 )//file DWtmp2 exist { printf("File DWtmp2 exist!\n" ); if( (ret=Pthread_mutex_trylock( &fLock.DWtmp2_FLOCK )) == EBUSY ) { //Add newly message to file_DWtmp1 Pthread_mutex_trylock( &fLock.DWtmp1_FLOCK); printf("**********Add newly message to file_DWtmp1************\n"); fp = Fopen( "DWtmp1.data","a+"); Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_DWXX , 1); tmpDWXX2++; printf("tmpDWXX2 is %d\n",tmpDWXX2); Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK); return 1; } else if( ret == 0) { //Add newly message to file_DWtmp2 printf("**********Add newly message to file_DWtmp2************\n"); fp = Fopen( "DWtmp2.data","a+"); Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_DWXX , 1); tmpDWXX1++; printf("tmpDWXX1 is %d\n",tmpDWXX1); Pthread_mutex_unlock( &fLock.DWtmp2_FLOCK ); return 1; } } else { printf("Leave TempStore.\n"); return 0; } } break; case TYPE_OF_TXXX: if( mode == CREAT ) { printf("**********Add newly message to file_TXtmp1************\n"); Pthread_mutex_trylock( &fLock.TXtmp1_FLOCK); fp = Fopen( "TXtmp1.data","a+"); Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_TXXX , 1); tmpTXXX1++; printf("tmpTXXX1 is %d\n",tmpTXXX1); Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK ); return 1; } else if( mode == QUERY) { if( stat( "TXtmp1.data",&buf ) == 0 ) { //file TXtmp1 exist printf("File F_TXtmp1 exist!\n" ); if( (ret=Pthread_mutex_trylock( &fLock.TXtmp1_FLOCK)) == EBUSY ) { //Add newly message to file_TXtmp2 Pthread_mutex_trylock( &fLock.TXtmp2_FLOCK); printf("**********Add newly message to file_TXtmp2************\n"); fp = Fopen( "TXtmp2.data","a+"); Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_TXXX , 1); tmpTXXX2++; printf("tmpDWXX2 is %d\n",tmpTXXX2); Pthread_mutex_unlock( &fLock.TXtmp2_FLOCK); return 1; } else if( ret == 0 ) { //Add newly message to file_TXtmp1 printf("**********Add newly message to file_TXtmp1************\n"); fp = Fopen( "TXtmp1.data","a+"); Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_TXXX , 1); tmpTXXX1++; printf("tmpTXXX1 is %d\n",tmpTXXX1); Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK ); return 1; } } else if( stat( "TXtmp2.data",&buf ) == 0 )//file DWtmp2 exist { printf("File F_TXtmp2 exist!\n" ); if( (ret=Pthread_mutex_trylock( &fLock.TXtmp2_FLOCK )) == EBUSY ) { //Add newly message to file_TXtmp1 Pthread_mutex_trylock( &fLock.TXtmp1_FLOCK); printf("**********Add newly message to file_DWtmp1************\n"); fp = Fopen( "TXtmp1.data","a+"); Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_TXXX , 1); tmpTXXX2++; printf("tmpTXXX2 is %d\n",tmpTXXX2); Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK); return 1; } else if( ret == 0) { //Add newly message to file_TXtmp2 printf("**********Add newly message to file_TXtmp2************\n"); fp = Fopen( "TXtmp2.data","a+"); Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp ); Fclose( fp ); AddCount( TYPE_OF_TXXX , 1); tmpTXXX1++; printf("tmpTXXX1 is %d\n",tmpTXXX1); Pthread_mutex_unlock( &fLock.TXtmp2_FLOCK ); return 1; } } else { printf("Leave TempStore.\n"); return 0; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -