C API调MySQL长时间运行会导致连接失败问题?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C API调MySQL长时间运行会导致连接失败问题?

蛮大人123 2016-02-05 19:00:02 2149

环境是Windows XP SP3,MySQL 5.1.33,客户端是Bin下的libmysql.dll。
已经打了注册表补丁:

  "TcpTimedWaitDelay"=dword:0000001e
  "MaxUserPort"=dword:0000fffe

.h
MYSQL *mysql;

.cpp
        try
        {
//         MYSQL mysql_struct;
//         mysql = &mysql_struct;
//         mysql_init(mysql);
            mysql = mysql_init(NULL); //时间久了(2小时以上),执行到这里会异常
            if (NULL == mysql)
                ::MessageBox(NULL, _T("出错了!"), _T("TEST MODE"), MB_OK);
            
            if (!mysql_real_connect(mysql,"127.0.0.1", "root", "", "db",3309,NULL,0))                
            {
                CString str;
                str.Format("%d,%s", i,mysql_error(mysql));
                ::MessageBox(NULL, _T(str), _T("TEST MODE"), MB_OK);
                //printf( "Error connecting to database: %s\n",mysql_error(mysql));
            }
            else
                printf("Connected...\n");
//             
// mysql_set_character_set(mysql,"gbk"); 
            _tcscpy(lpszString, _T("call SP_DWXX(330000)"));
            mysql_real_query(mysql, lpszString, _tcslen(lpszString));
            
            mysql_close(mysql);
            mysql=NULL;
            mysql_library_end();//这里也会异常
        }
        catch (...)
        {
            CString str;
            str.Format("catch:%d", i);
            ::MessageBox(NULL, _T(str), _T("TEST MODE"), MB_OK);
        }
    }
关系型数据库 MySQL API C++ Windows
分享到
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:38:05
    1. 如果你的程序是想共享一个连接的话,那么mysql*只需要初始化一次。没必要每次都初始化。
      在初始化以后,将interactive_timeout 和 wait_timeout都设置大一些。(如1073741824L)
      sql = "set wait_timeout=" + timeout;
      executeCmd(sql.c_str());
      sql = "set interactive_timeout=" + timeout;
      executeCmd(sql.c_str());
    2. 即算是想每次都创建连接的话,你也可预先多创建几个连接,给这些调用使用。
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程