Skip to content

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;
}