XGCI多线程编程跨平台
#include "xuguci.h"
#define F_OK 0
int NumTime(int *ntime,time_t btime);
void process_runsql(void* para);
//#include "c_head.h"
#include<time.h>
#include <sys/stat.h>
#include<stdio.h>
#ifdef WIN32
#include <direct.h>
#include<io.h>
#include <tchar.h>
#include <winsock.h>
#include <windows.h>
#include "process.h"
//__declspec(thread) Thd * __gg_cur_thd;//???
#else
#include <sys/types.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<errno.h>
#include<stdarg.h>
#include <time.h>
#include<dirent.h>
//pthread_key_t __gg_cur_thd;
//void distruct(void* para);
#include<unistd.h>
#include <pthread.h>
#define Sleep(N) sleep(N/1000)
pthread_t begin_thread (void(*thd_func)(void*), int s_size,void *para/*,int priority*/)
{
pthread_t id;
pthread_attr_t attr;
//struct sched_param param;
pthread_attr_init(&attr);
//................
if(!pthread_create(&id,NULL,(void*(*)(void*))thd_func,para))
return id;
return 0;
}
#endif
char strIp[30]={0};
char DBName[50]={0};
char Port[7]={0};
char StrIp[30];
//char Path1[150] ;
char DBName1[50] ;
char Port1[7] ;
char UUser1[50]={0};
char UPass1[50]={0};
char UUser[50]={0};
char UPass[50]={0};
char sql[1024]={0};
int sqllen=0;
//int main()
#ifdef WIN32
int main(int argc, CHAR* argv[])
#else
int main()
#endif
{
int ct[10];
int i,j=0;
int ret;
#ifdef WIN32
char cfgpath[500]="..\\run\\setup.txt";
#else
char cfgpath[500] = "../run/setup.txt";
#endif
FILE * fp;
ret=access(cfgpath,F_OK);
if(ret<0)
{printf("path do not exist\n");return 0;}
char b_no[10]={0};
char C_time[10]={0};
fp=fopen(cfgpath,"rb");
fscanf(fp,"%s %s %s %s %s %s %s",strIp,DBName,Port,UUser,UPass,C_time,b_no);
sqllen =fread(sql,1,1024,fp);
fclose(fp);
int len=strlen(strIp);
memcpy(StrIp,strIp+1,len-1);
StrIp[len-2]='\0';
/*len=strlen(Path);
memcpy(Path1,Path+1,len-1);
Path1[len-2]='\0';*/
len=strlen(DBName);
memcpy(DBName1,DBName+1,len-1);
DBName1[len-2]='\0';
len=strlen(Port);
memcpy(Port1,Port+1,len-1);
Port1[len-2]='\0';
len=strlen(UUser);
memcpy(UUser1,UUser+1,len-1);
UUser1[len-2]='\0';
len=strlen(UPass);
memcpy(UPass1,UPass+1,len-1);
UPass1[len-2]='\0';
char C_time1[10]={0};
len=strlen(C_time);
memcpy(C_time1,C_time+1,len-1);
C_time1[len-2]='\0';
int F_time=atoi(C_time1);
int Bno=atoi(b_no);
NumTime(ct,-1);
printf("begin at time: %04d-%02d-%02d %02d:%02d:%02d >",ct[0],ct[1],ct[2],ct[3],ct[4],ct[5]);
F_time+=ct[5];
int a=0;
while(1)
{
if(a==0)
{
for(i=0;i<Bno;i++)
{
#ifdef WIN32
_beginthread(process_runsql,0,NULL);
#else
begin_thread(process_runsql,0,(void*)NULL);
#endif
}
a=1;
}
Sleep(1000);
j++;
if((j%60)==0)
{
printf("\n pass %d mins ",j/60);
}
if(j>F_time)
{
exit(0);
}
}//end while 1
return 0;
}
void process_runsql(void* para)
{
//declare
char msg[400];
char sql_cmd[1024]={0};
char tnsname[20];
char dbid[20];
char username[20];
char passwd[20];
int ret;
int * ver=(int*)malloc(4);
* ver=XuguCI_ATTR_ENV_VERSION;
short* port=(short*)malloc(2);
*port=atoi(Port1);//5138;
int * use_pool=(int*)malloc(4);
int* isol=(int*)malloc(4);
*isol=2;
int * ze=(int*)malloc(4);
*ze=XuguCI_USESSL_FALSE;
int * len=(int*)malloc(4);
*len=60000;
sprintf(tnsname,"%s",StrIp);
sprintf(dbid,"%s",DBName1);
sprintf(username,"%s",UUser1);
sprintf(passwd,"%s",UPass1);
char* db_name=strdup(dbid);
char* ip_str=strdup(tnsname);
XuguCIHANDLE hdenv ;
XuguCIHANDLE hdsver ;
XuguCIHANDLE hddbc ;
XuguCIHANDLE hdstmt ;
int j=0;
while(1)
{
XuguCIHandleAlloc(NULL,&hdenv,HT_ENV);
XuguCIHandleAttrSet(hdenv,1,(XuguCIPOINTER)ver,-1);
* use_pool=0;
XuguCIHandleAttrSet(hdenv,2,(XuguCIPOINTER)use_pool,-1);
XuguCIHandleAlloc(hdenv,&hdsver,HT_SERVER);
XuguCIHandleAttrSet(hdsver,XuguCI_ATTR_SRV_IP,ip_str,XuguCI_NTS);//ip "192.168.1.195"
XuguCIHandleAttrSet(hdsver,XuguCI_ATTR_SRV_PORT,(short*)port,XuguCI_NTS);
XuguCIHandleAttrSet(hdsver, XuguCI_ATTR_SRV_DBNAME,db_name,XuguCI_NTS);//"DB2"
XuguCIHandleAlloc(hdsver,&hddbc,HT_SESSION);
XuguCIHandleAttrSet(hddbc,XuguCI_ATTR_SESS_TIMEZONE,"GMT+08:00",XuguCI_NTS);
XuguCIHandleAttrSet(hddbc,XuguCI_ATTR_SESS_CHARSET,(int*)ver,XuguCI_NTS);
XuguCIHandleAttrSet(hddbc,XuguCI_ATTR_SESS_ISOLEVEL,(int*)isol,XuguCI_NTS);
XuguCIHandleAttrSet(hddbc,XuguCI_ATTR_SESS_SSL,ze,XuguCI_NTS);
XuguCIHandleAttrSet(hddbc,XuguCI_ATTR_SESS_AUTO_COMMIT,(int*)ver,XuguCI_NTS);
XuguCIHandleAttrSet(hddbc,XuguCI_ATTR_SESS_TIMEOUT,(int*)len,XuguCI_NTS);
ret=XuguCISessionBegin( hddbc,(char*)username,(char*)passwd);
if ( ret < 0 )
{
printf("connect failure!%d \n",j++);
goto END1 ;
}
ret=XuguCIHandleAlloc(hddbc,&( hdstmt),HT_STATEMENT );
if(sqllen>10)
memcpy(sql_cmd,sql,strlen(sql));
else
sprintf(sql_cmd," insert into tt1 values(%d,'leimei','letus appletree bretown')",j++);
ret=XuguCIExecDirect( hdstmt,sql_cmd,XuguCI_NTS);
if ( ret < 0 )
{
char errmessage[512]={0};
char errcode[7]={0};
int rlen=0;
XuguCIErrors( hdstmt,errcode,errmessage,&rlen);
sprintf(msg,"%s\n insert error number:%s,error message:%s \n",sql_cmd,errcode,errmessage );
}
// free and disconnect;
XuguCIHandleFree( hdstmt);
END1:
XuguCISessionEnd( hddbc);
XuguCIHandleFree( hddbc);
XuguCIHandleFree( hdsver);
XuguCIHandleFree( hdenv);
}
}
int NumTime(int *ntime,time_t btime)
{
struct tm *tblock;
if( btime < -1 ) return -1;
if( btime == -1 )
btime = time(NULL);
//tblock = gmtime( &btime );
tblock =localtime( &btime );
ntime[0] = tblock->tm_year+1900;
ntime[1] = tblock->tm_mon+1;
ntime[2] = tblock->tm_mday;
ntime[3] = tblock->tm_hour;
ntime[4] = tblock->tm_min;
ntime[5] = tblock->tm_sec;
return 1;
}