大家好!
程序功能是跟另外一台机器采用socket通信,读取消息解析之后起一个线程进行数据库操作,之后在线程中返回消息。
其中数据库操作的代码使用proc编写,编译的时候加的proc参数为:
proc db_fun.pc THREADS=YES CPOOL=YES CMAX=5 CMIN=1 CINCR=2
/***************
* db_fun.pc
***************/
EXEC SQL INCLUDE SQLCA;
EXEC SQL DECLARE db_name DATABASE;
char lz_UserName[STRING_SIZE_30] = "";
char lz_Password[STRING_SIZE_30] = "";
char lz_DbString[STRING_SIZE_30] = "";
int select_info(STRU_MSG *asp_recv_msg,STRU_MSG *asp_send_msg)
{
sql_context sql_ctx;
EXEC SQL CONTEXT ALLOCATE :sql_ctx;
EXEC SQL CONTEXT USE :sql_ctx;
EXEC SQL CONNECT :lz_UserName IDENTIFIED BY :lz_Password AT db_name USING :lz_DbString;
char l_name[30];
EXEC SQL AT db_name select t_name into :l_name from t_emp;
……
EXEC SQL AT db_name COMMIT WORK RELEASE;
EXEC SQL CONTEXT FREE :sql_ctx;
}
在db_fun.pc每个函数中都写连接、释放。
测试时发现每次接收到一个消息就会通过线程新建一个dedicated connections跟session并且始终不释放直到主进程终止。本来限制连接数的proc(Pro*C/C++: Release 9.2.0.1.0)预编译参数CMAX=5没有起作用。数据库中的inactive的session也一直增多。
请问代码是哪儿的问题?
------解决方案--------------------
这个问题不是太懂,不好意思帮不上忙,参考下这个文档,会不会有你想要的结果
http://wenku.baidu.com/view/e3f0114bcf84b9d528ea7aed.html
------解决方案--------------------
waiting.........