请教一下mysql重连的问题,以下是代码:
UINT ReadSQL(LPVOID pParam)
{
unsigned int len;
MYSQL_RES *res_set;
MYSQL_ROW row;
unsigned int len;
char mysql_query_cmd[1000];
CString mySqlState;
my_bool reconnect = 1;
MYSQL* sock;
int failedNum = 0;
if (mysql_library_init(0, NULL, NULL))
{
::AfxMessageBox(_T("could not initialize MySQL library\n"),MB_ICONERROR | MB_OK);
::AfxGetApp()->GetMainWnd()->PostMessageW(WM_CLOSE, 0, 0);  
return -1;}
sock = mysql_init(0);
if (sock == NULL)
{
::AfxMessageBox(_T("初始化MySql数据库失败!"),MB_ICONERROR | MB_OK);
return -1;
}
mysql_options(sock, MYSQL_OPT_RECONNECT, &reconnect);
// 连接数据库
if (mysql_real_connect(sock, pDoc->m_dbHost, pDoc->m_dbUser, pDoc->m_dbPass, pDoc->m_dbName, 0, NULL, 0) == NULL)
{
::AfxMessageBox(_T("连接数据库失败!"),MB_ICONERROR | MB_OK);
mysql_close(sock);
return -1;
}
  //由于不确定我mysql c api的版本在5.1.6之上还是之下,我有执行了一遍mysql_options()
mysql_options(sock, MYSQL_OPT_RECONNECT, &reconnect);
// 设置字符集
mysql_set_character_set(sock,"gb2312");while(true)
{
if(failedNum > 5)
{
mySqlState = mysql_stat(sock);
if(::AfxMessageBox(mySqlState +_T(",请检查数据库服务是否开启以及网络是否连接通畅。\n重新尝试连接请点击“重试”,退出程序请单击“取消!”"),MB_ICONERROR | MB_RETRYCANCEL) == IDRETRY)
{
if (!mysql_ping(sock)) //ping成功!
{
mysql_close(sock);//关闭sock
if (mysql_real_connect(sock, pDoc->m_dbHost, pDoc->m_dbUser, pDoc->m_dbPass, pDoc->m_dbName, 0, NULL, 0) != NULL)
{
failedNum = 0;
}
}
else
{
::AfxGetApp()->GetMainWnd()->PostMessageW(WM_CLOSE, 0, 0);  
return -1;
}
}len = sprintf_s(mysql_query_cmd,1000,"select * from humiturecpy");
rc = mysql_real_query(sock,mysql_query_cmd, len);
if(rc != 0)
{
::AfxMessageBox(_T("访问数据库失败!"),MB_ICONERROR | MB_OK);
failedNum ++;
}
else
{
//此处省略对查询结果集的一些操作
}
//此处省略一些mysql_real_query操作,同上Sleep(3000)
}
if(sock != NULL)
{
mysql_close(sock);
sock = NULL;
}
mysql_library_end();
return 0;
}问题1:上述代码中当由于断网(拔掉网线)问题导致failedNum > 5时,插入网线,选择“重试”,为什么if (mysql_real_connect(sock, pDoc->m_dbHost, pDoc->m_dbUser, pDoc->m_dbPass, pDoc->m_dbName, 0, NULL, 0) != NULL)这句会报错?
问题2:如果我这种思路是错误的,还有什么方式能在插入网线之后检测连接,如果网络通畅,继续执行这个线程?