亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c_shm_mem.cpp

?? 一個基于HP機器的共享內存的實現, 很使用,大型系統,資料管理非常有用,只要將資料用sql語句配置好,裝載共享內存即可,是一個已經在用的大型系統的共享內存程序,非常有價值.
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/***********************************************************************
 * Module:  c_shm_mem.cpp
 * Author:  Administrator
 * Modified: 2005年9月15日 9:03:22
 * Purpose: Implementation of the class c_shm_mem
 * Comment: 共享內存基本類
 ***********************************************************************/


#include "c_shm_mem.h"

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::c_shm_mem()
// Purpose:		構造函數
// Comment:		創建c_share_info對象
// Return:     
////////////////////////////////////////////////////////////////////////
c_shm_mem::c_shm_mem()
{
	p_share_info = new c_share_info();
	p_share_info->loadAllInfo();
}

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::~c_shm_mem()
// Purpose:		析構函數
// Comment:		刪除c_share_info對象
// Return:     
////////////////////////////////////////////////////////////////////////
c_shm_mem::~c_shm_mem()
{
	delete p_share_info;
}

/*void c_shm_mem::init( char* mem_name )
{
	SHARE_MEM_INFO* tmp = p_share_info->getMemInfo( mem_name);
	if( tmp == NULL )
	{
		printf("不存在%s的共享內存\n", mem_name );fflush(stdout);
		exit(1);
	}
	c_shm newshm(tmp->share_area_id);
	newshm.getshm();
	c_shm_mem* newmem = newshm.get_mem(mem_name);	

	p_share_mem_info = newmem->p_share_mem_info;
	p_stShareInfo = newmem->p_stShareInfo;
	p_field_info = newmem->p_field_info;
	head_point = newmem->head_point;
	append_mutex._mutex = newmem->append_mutex._mutex;
	record_count_mutex._mutex = newmem->record_count_mutex._mutex;
	v_update_mutex.clear();
	for( int i = 0 ; i < newmem->p_stShareInfo->block_count ; i ++ )
	{
		c_mutex t_mutex;
		t_mutex._mutex = &(newmem->p_stShareInfo->update_lock[i]);
		v_update_mutex.push_back( t_mutex );
	}
	append_key_mutex._mutex = newmem->append_key_mutex._mutex;

	//拷貝路徑
	strcpy(file_path, newmem->file_path );
}*/

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::loadSQL()
// Purpose:		加載SQL信息
// Comment:		從c_share_info對象中加載SQL信息
// Return:     int
////////////////////////////////////////////////////////////////////////
int c_shm_mem::loadSQL()
{
	//theLog<<"mem_area_name:"<<p_share_mem_info->mem_name<<endi;

	p_share_info->getSqlInfo( p_share_mem_info->mem_name , v_sql_info );
	
	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::loadFieldInfo()
// Purpose:		加載字段信息
// Comment:		從c_share_info對象中加載字段信息
// Return:     int
////////////////////////////////////////////////////////////////////////
int c_shm_mem::loadFieldInfo( )
{
	if( v_sql_info.size() <= 0 )
	{
		theLog<<"未加載SQL信息!"<<endi;
		return errNotloadSQL;
	}

	//取第一個的sql語句
	int select_no = v_sql_info[0].select_no;
	
	//取得字段信息
	p_share_info->getFieldInfo( select_no, v_mem_field_info );
	//theLog<<"select_no:"<<select_no<<"\tv_mem_field_info.size():"<<v_mem_field_info.size()<<endi;
	for( int i = 0 ; i < MAX_ATTR_COUNT ; i ++ )
	{
		field_attr_id[i] = -1 ;
	}
	int pos = 0;
	for( i = 0 ; i < v_mem_field_info.size() ; i ++ )
	{
		field_attr_id[v_mem_field_info[i].event_attr_id] = i;
		v_mem_field_info[i].field_pos = pos;
		
		//20060609 加載事件屬性名稱
		EVENT_ATTR tmp_event_attr;
		tmp_event_attr.attr_id = v_mem_field_info[i].event_attr_id;
		//////////2005-11-23
		//pos += v_mem_field_info[i].field_size;
		if( v_mem_field_info[i].field_size == -1 )
		{
			pos += 4;
		}
		else
		{
			pos += v_mem_field_info[i].field_size;
		}
		///////////////////////

		p_field_info[i].event_attr_id = v_mem_field_info[i].event_attr_id ;
		p_field_info[i].field_pos = v_mem_field_info[i].field_pos ;
		p_field_info[i].field_size = v_mem_field_info[i].field_size ;
		p_field_info[i].field_type = v_mem_field_info[i].field_type ;
		p_field_info[i].key_count = 0;
	}
	
	p_share_mem_info->field_count = v_mem_field_info.size();
	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::buildSQLString()
// Purpose:		組裝SQL語句
// Comment:		組裝select count(*) from 語句與select field語句,分別放入v_sqlstring與v_countsqlstring中
// Return:     int 成功:0 失敗:errNotloadSQL
////////////////////////////////////////////////////////////////////////
int c_shm_mem::buildSQLString()
{
	if( v_sql_info.size() <= 0 )
	{
		theLog<<"未加載SQL信息!"<<endi;
		return errNotloadSQL;
	}

	int i, j;
	v_sqlstring.reserve( 10 );
	v_countsqlstring.reserve( 10 );

	for( i = 0 ; i < v_sql_info.size() ; i ++ )
	{		
		vector <MEM_FIELD_INFO> memField;
		p_share_info->getFieldInfo( v_sql_info[i].select_no, memField );
		//theLog<<"select_no:"<<v_sql_info[i].select_no<<"\tmemfield:"<<memField.size()<<endi;

		if( memField.size() > 0 )
		{
			string sql = "select ";
			for( j = 0 ; j < memField.size() ; j ++ )
			{
				sql += memField[j].field_sql ;
				if( j < ( memField.size() - 1 ) )
					sql += ", ";			
			}
			sql += " from ";
			sql += v_sql_info[i].from_sql;
			
			if( strcmp( v_sql_info[i].condition , "" ) != 0 )
			{
				sql += " ";
				sql += v_sql_info[i].condition;
			}
			//theLog<<"ddd:"<<sql<<"|"<<endi;
			v_sqlstring.push_back( sql );

			string count_sql = "select count(*) from ";
			count_sql += v_sql_info[i].from_sql;
			if( strcmp( v_sql_info[i].condition , "" ) != 0 )
			{
				count_sql += " ";
				count_sql += v_sql_info[i].condition;
			}
			v_countsqlstring.push_back( count_sql );
		}
	}

	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::loadData()
// Purpose:     加載數據,繼承類可以重寫,在初始化后一次調用
// Return:     int 成功:0 失敗:errMemDelete,errAppenElement
////////////////////////////////////////////////////////////////////////
int c_shm_mem::loadData(const int sql_seq)
{
	if( p_stShareInfo->valid_flag != 1 )
	{
		theLog<<"共享內存塊不可用!"<<endi;
		return errMemDelete;
	}

	int i, j = 0;
	char field[MAX_FIELD_SIZE];

	//從數據庫中加載數據
	//loadSQL();
	//loadFieldInfo();
	//buildSQLString();

	Statement statement = conn.createStatement();
	statement.setSQLString( "alter session set NLS_DATE_FORMAT = yyyymmddhh24miss" );
	statement.execute();

	
	//把記錄組合成一個結構,并寫入共享內存中
	char buffer[ MAX_RECORD_SIZE ];
	int int_field = 0;
	int* p_int_field;
	double double_field = 0;
	long long_field = 0;
	double* p_double_field;
	long* p_long_field;
	char kk[10];
	char temp[MAX_RECORD_SIZE];
	long load_record_count = 0;
	long record_counts = 0;
	for( i = 0 ; i < v_sqlstring.size() ; i ++ )
	{
		if( sql_seq != -1 )
		{
			if( sql_seq != i )
				continue;
		}

		try
		{
			statement.setSQLString( v_countsqlstring[i].c_str() );
			statement.execute();
			statement>>load_record_count;
			theLog<<"begin load "<<load_record_count<<" records!"<<endi;
		}
		catch(Exception& ex1)
		{
			theLog<<"get count error!"<<endi<<ex1.what();
			return -1;
		}

		theLog<<" exec sql:"<<v_sqlstring[i].c_str()<<endi;
		statement.setSQLString( v_sqlstring[i].c_str() );
		try
		{
			statement.execute();
		}
		catch(Exception& ex)
		{
			theLog<<"execute sql error!"<<endi<<ex.what();
			return -1;
		}
		try
		{
			while( statement>>field )
			{
				//theLog<<i<<":"<<j<<":"<<field<<":"<<p_field_info[j].field_type<<endi;
				//theLog<<"p_field_info[j].field_pos:"<<p_field_info[j].field_pos<<endi;
				//theLog<<"p_field_info[j].field_size:"<<p_field_info[j].field_size<<endi;
				
				switch( p_field_info[j].field_type )
				{
				case STRING_TYPE_D:
					//theLog<<p_field_info[j].field_type<<"afe";
					//memcpy( &(buffer[p_field_info[j].field_pos]), field, p_field_info[j].field_size );
					if(SetData(j,field)<0)
					{
						setRecordCount();
						theLog<<"load count3:"<<getRecordCount()<<endi;
						return errAppenElement;
					}
					break;
				case INT_TYPE_D:
					int_field =  atoi( field );
					//p_int_field = (int*) temp;
					//memcpy( temp, &int_field, sizeof(int) );
					//memcpy( &(buffer[p_field_info[j].field_pos]), temp, sizeof(int) );
					
					if(SetData(j, &int_field)<0)
					{
						setRecordCount();
						theLog<<"load count3:"<<getRecordCount()<<endi;
						return errAppenElement;
					}
					break;
				case CHAR_TYPE_D:
					//memcpy( &(buffer[p_field_info[j].field_pos]), field, p_field_info[j].field_size );
					if(SetData(j,field)<0)
					{
						setRecordCount();
						theLog<<"load count3:"<<getRecordCount()<<endi;
						return errAppenElement;
					}
					break;
				case DOUBLE_TYPE_D :
					double_field = atof(field);
					//p_double_field = (double*) temp;
					//memcpy( temp, &double_field, sizeof(double) );
					//memcpy( &(buffer[p_field_info[j].field_pos]), temp, sizeof(double) );
					if(SetData(j,&double_field)<0)
					{
						setRecordCount();
						theLog<<"load count3:"<<getRecordCount()<<endi;
						return errAppenElement;
					}
					break;
				case LONG_TYPE_D :
					long_field = atol(field);
					//p_double_field = (double*) temp;
					//memcpy( temp, &double_field, sizeof(double) );
					//memcpy( &(buffer[p_field_info[j].field_pos]), temp, sizeof(double) );
					if(SetData(j,&long_field)<0)
					{
						setRecordCount();
						theLog<<"load count3:"<<getRecordCount()<<endi;
						return errAppenElement;
					}
					break;
				default:
					//memcpy( &(buffer[p_field_info[j].field_pos]), field, p_field_info[j].field_size );
					SetData(j,field);
					break;
				};
				
				j ++;
				if( j >= p_share_mem_info->field_count )
				{		
					if( singal_terminate.isTerminated() )
					{
						theLog<<"程序終止!"<<endi;
						singal_terminate.kill();
					}
					j = 0;
					if( appendElement( ) < 0 )
					{
						setRecordCount();
						theLog<<"裝載失敗1,已裝載記錄數:"<<getRecordCount()<<endi;
						return errAppenElement;
					}
					//theLog<<"addok1"<<endi;
					//theLog<<"buffer:"<<&buffer[30]<<"|"<<endi;
					memset( buff, 0, p_share_mem_info->element_size );
					record_counts++;

					if( record_counts % 200000 == 0 )
					{
						theLog<<"已裝載記錄數:"<<record_counts<<endi;
					}
				}
			}
		}
		catch(Exception& ex)
		{
			theLog<<"裝載第"<<record_counts<<"條記錄第"<<j<<"個字段出錯!"<<field<<endi;
			setRecordCount();
			return -2;
		}
		if( j > 0 )
		{
			//theLog<<"buffer:"<<&buffer[30]<<"|"<<endi;
			j = 0;
			if( appendElement(  ) < 0 )
			{
				setRecordCount();
				theLog<<"裝載失敗2,已裝載記錄數:"<<getRecordCount()<<endi;
				return errAppenElement;
			}
			memset( buff, 0, p_share_mem_info->element_size );
			record_counts++;
		}
	}

	setRecordCount();
	theLog<<"已裝載記錄數:"<<getRecordCount()<<endi;
	if( singal_terminate.isTerminated() )
	{
		theLog<<"程序終止!"<<endi;
		singal_terminate.kill();
	}
	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::unloadData()
// Purpose:		卸載數據
// Comment:		修改標志,同時,將記錄數修改為0
// Return:     int,成功:0,失敗:errMemUnload
////////////////////////////////////////////////////////////////////////
int c_shm_mem::unloadData(void)
{
	// TODO : implement
	if( p_stShareInfo->valid_flag == 0 )
	{
		theLog<<"數據已經被卸載!"<<endi;
		return errMemUnload;
	}

	record_count_mutex.enterMutex();
	append_mutex.enterMutex();
	p_stShareInfo->real_record_count = 0;
	p_stShareInfo->append_record_count = 0;
	append_mutex.leaveMutex();
	record_count_mutex.leaveMutex();

	p_stShareInfo->valid_flag = 0;

	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_shm_mem::getElement( int seq )
// Purpose:    取得指定序號的記錄,返回頭指針。
// Comment:		將共享內存中的記錄拷貝到臨時buffer中,返回buffer的頭指針
// Return:     void*
////////////////////////////////////////////////////////////////////////
char* c_shm_mem::getElement( int seq )
{
	//theLog<<"seq:"<<seq<<endi;
	//theLog<<"p_stShareInfo->real_record_count:"<<p_stShareInfo->real_record_count<<endi;
   // TODO : implement

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影院久久久| 国产精品高潮久久久久无| 欧美三级视频在线观看| 91麻豆精品视频| 日本精品免费观看高清观看| 99视频精品免费视频| 成人国产精品免费观看动漫 | 色av成人天堂桃色av| 99久久精品一区| 在线视频国产一区| 欧美午夜精品理论片a级按摩| 在线观看日韩电影| 欧美日韩精品一区二区天天拍小说 | 欧美日韩免费一区二区三区视频| 91久久精品一区二区| 欧美丝袜丝交足nylons| 777xxx欧美| 久久综合色之久久综合| 欧美经典三级视频一区二区三区| 国产精品久久久久久久久果冻传媒| 日本一区二区三区国色天香 | 欧美电影免费观看高清完整版在| 日韩一区二区免费在线电影| 欧美成人性战久久| 国产精品人人做人人爽人人添| 1区2区3区国产精品| 亚洲国产视频一区二区| 久久97超碰国产精品超碰| 国产盗摄精品一区二区三区在线 | 亚洲精品高清视频在线观看| 香蕉成人伊视频在线观看| 韩国欧美国产一区| 99久久99久久免费精品蜜臀| 欧美写真视频网站| 国产婷婷色一区二区三区四区 | 国产精品一区免费视频| 成人av在线电影| 精品视频1区2区3区| 久久久久免费观看| 偷偷要91色婷婷| 成人性生交大片免费看在线播放 | 久久久青草青青国产亚洲免观| 国产精品麻豆一区二区 | 精品免费国产一区二区三区四区| 日产欧产美韩系列久久99| 国产一区二区剧情av在线| 色哟哟一区二区三区| 精品久久久久一区二区国产| 一区二区三区日韩在线观看| 国产精品资源在线观看| 在线播放中文字幕一区| 国产精品网站一区| 美女免费视频一区二区| 91成人国产精品| 国产精品国产馆在线真实露脸| 久久精品国产第一区二区三区| 91在线观看免费视频| 国产三级一区二区三区| 另类中文字幕网| 欧美日本乱大交xxxxx| 国产精品女人毛片| 国产精品亚洲专一区二区三区 | 国产成人精品免费视频网站| 91麻豆精品91久久久久同性| 亚洲综合色自拍一区| 97se亚洲国产综合自在线不卡 | 成人国产精品免费观看| 久久综合久久综合久久综合| 91玉足脚交白嫩脚丫在线播放| 精品国产一区二区三区不卡| 免费一级欧美片在线观看| 欧美日韩国产电影| 视频一区欧美日韩| 538在线一区二区精品国产| 亚洲国产精品久久久久婷婷884| 色综合一个色综合亚洲| 亚洲国产乱码最新视频| 91亚洲精品一区二区乱码| 国产精品九色蝌蚪自拍| 不卡电影一区二区三区| 中文一区二区在线观看 | 亚洲蜜桃精久久久久久久| 成人美女视频在线看| 国产精品久久夜| 色综合久久88色综合天天 | 一区二区三区影院| 在线观看日韩电影| 视频一区二区不卡| 欧美成人在线直播| 高清在线观看日韩| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产69精品一区二区亚洲孕妇| 国产精品美女一区二区| 色综合天天综合网天天狠天天| 亚洲乱码一区二区三区在线观看| 欧美视频在线一区| 美女视频一区二区三区| 国产欧美精品一区二区三区四区| 丁香婷婷综合五月| 亚洲午夜免费电影| 精品国精品国产尤物美女| 99九九99九九九视频精品| 亚洲综合丁香婷婷六月香| 欧美成人在线直播| 91伊人久久大香线蕉| 免费在线观看不卡| 国产精品激情偷乱一区二区∴| 欧美在线啊v一区| 老司机精品视频在线| 中文字幕一区二区5566日韩| 欧美午夜电影网| 国产在线看一区| 一区二区三区四区国产精品| 日韩亚洲欧美综合| 一本色道**综合亚洲精品蜜桃冫| 日韩电影免费在线看| 亚洲欧洲无码一区二区三区| 亚洲色图欧美激情| 日韩欧美国产综合| 91国产免费看| 丁香激情综合五月| 免费看欧美美女黄的网站| 亚洲欧美偷拍三级| 久久久精品免费网站| 91精品国产综合久久精品app| 国产馆精品极品| 日韩精品亚洲专区| 一区二区成人在线| 中文字幕一区免费在线观看| 日韩欧美电影在线| 欧美巨大另类极品videosbest| 波多野结衣中文字幕一区二区三区| 日韩成人一级大片| 亚洲国产一二三| 亚洲美女视频一区| 国产精品久久久久影院亚瑟| 欧美xxx久久| 日韩欧美成人一区二区| 欧美三级电影精品| 色婷婷av一区二区三区大白胸| 国产91清纯白嫩初高中在线观看| 久久国产精品99久久人人澡| 日韩福利视频导航| 视频一区视频二区中文字幕| 亚洲国产精品久久人人爱| 亚洲欧美日韩一区| 亚洲日本在线视频观看| 国产精品久久久久久久久免费相片 | 黄一区二区三区| 美女免费视频一区二区| 免费看欧美女人艹b| 蜜桃一区二区三区在线观看| 蜜桃av一区二区三区电影| 日本怡春院一区二区| 免费看黄色91| 久99久精品视频免费观看| 激情av综合网| 丰满放荡岳乱妇91ww| av资源网一区| 在线欧美日韩国产| 欧美色电影在线| 日韩视频在线一区二区| 欧美电影免费观看高清完整版在| 精品久久五月天| 国产精品美女久久久久久久久久久 | 亚洲日本丝袜连裤袜办公室| 亚洲天堂av一区| 亚洲精品国产一区二区精华液 | 国产精品99久| www.亚洲精品| 欧美丝袜丝交足nylons图片| 6080午夜不卡| 国产精品色婷婷久久58| 亚洲欧美激情插| 日韩国产高清在线| 国产剧情在线观看一区二区| 不卡区在线中文字幕| 欧美日韩精品三区| 精品国产91亚洲一区二区三区婷婷| 久久久91精品国产一区二区精品| 国产精品久久久99| 亚洲成人免费视| 国产一区二区三区久久久| 99精品久久久久久| 8x8x8国产精品| 国产精品久久久久毛片软件| 亚洲一区二区在线观看视频 | 久久精品无码一区二区三区| 中文字幕av一区 二区| 亚洲无人区一区| 国产不卡在线一区| 欧美另类高清zo欧美| 久久久久久久久蜜桃| 亚洲一本大道在线| 国产乱妇无码大片在线观看| 91社区在线播放| 精品日本一线二线三线不卡| 亚洲桃色在线一区| 国产自产2019最新不卡| 欧洲色大大久久|