Вот код:
int check_online_table()
{
PGresult *res;
fstring dbcomm_str;
PQclear(PQexec(users_dbconn, "BEGIN;"));
res = PQexec(users_dbconn, "DECLARE uportal CURSOR FOR SELECT uin FROM Online_Users");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
handle_database_error(res, "[DECLARE PORTAL IN ODB CHECK]");
return(0);
}
else
{
PQclear(res);
}
/* Check every user in table */
for (;;)
{
res = PQexec(users_dbconn, "FETCH IN uportal");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
handle_database_error(res, "[ODB CHECK FETCH FROM PORTAL]");
break;
}
if (PQntuples(res) == 0)
{
PQclear(res);
break;
}
if (!shm_user_exist(atoul( PQgetvalue(res, 0, 0) )))
{
/* Delete this user from database only */
db_online_delete(atoul(PQgetvalue(res, 0, 0)), 0);
}
PQclear(res);
}
slprintf(dbcomm_str, sizeof(dbcomm_str)-1,
"UPDATE Online_Users SET lutm=%d",
timeToLong(time(NULL)));
PQclear(PQexec(users_dbconn, dbcomm_str));
PQclear(PQexec(users_dbconn, "CLOSE uportal"));
PQclear(PQexec(users_dbconn, "END;"));
return (0);
}
Зацикливается, как я выяснил, в бесконечном цикле ( for (;;)). Сам я не програмирую в Си, программирую на Delphi для винды, поэтому моих знаний не хватает чтоб разораться почему зацикливается. Вроде всё нормально.
З.Ы. Если научите как делать сдесь отступы, с радостью запостю со всеми отступами. Спасибо.
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум iserverd (2005)
- Форум IServerD (2004)
- Галерея Iserverd (2002)
- Новости IServerd 2.4.6 (2003)
- Новости IServerd 2.4.5 (2002)
- Форум iserverd trouble (2005)
- Форум установка IServerd (2005)
- Форум Библиотека для параллельного запуска участков BASH-кода (2013)
- Форум Ищу тулзу для поиска дублирующихся участков кода (2015)
- Форум Problema s IServerd (2004)