Вопрос по MySQL.

Сообщения
896
Реакции
150
Помог
25 раз(а)
Здравствуйте, я слышал, что в plugin_end нужно закрывать коннект к бд. По типу:

C++:
public plugin_end() {
    if(g__hSqlTuple) {
        SQL_FreeHandle(g__hSqlTuple);
    }
    
    if(g__hSqlConnection) {
        SQL_FreeHandle(g__hSqlConnection);
    }
}
Решив поизучать это всё, я наткнулся на код Максима Ёжикова (BlackSignature) В данном плагине (Coins Collector 1.0.1f) он не закрывает коннект, а делает следующий метод:
Код:
new bool:g_bPluginEnded;

public SQL_Handler(iFailState, Handle:hQueryHandle, szError[], iErrorCode, eSqlData[], iDataSize, Float:fQueryTime) {
    if(g_bPluginEnded) {
        return;
    }
    
    ...
}

public plugin_end() {
    g_bPluginEnded = true;
}

Так вод, я хотел бы узнать, какой метод лучше использовать? И влияет ли вообще не закрытый коннект на длительность смены карты?
 
Сообщения
1,315
Реакции
2,315
Помог
57 раз(а)
ImmortalAmxx, у меня там асинхронные запросы, я не "коннект не закрываю", а не освобождаю tuple с данными по асинхронному подключению. При смене карты sqlx сам почистит. Но можно чистить и самостоятельно в plugin_end(), если хочется. В твоём примере g__hSqlConnection это вероятно хендл синхронного подключения, я считаю хорошей практикой их освобождать в plugin_end(), но по идее, это тоже не обязательно. По логике - синхронно подключился, выполнил задачу, отключился, освободил, занулил указатель. Освобождать синхронку нужно в случае, если ты её открыл, и она у тебя по ходу пьессы продолжает висеть открытой, и через какое-то время её таки пора закрывать.

По поводу g_bPluginEnded - при асинхронном запросе ответ в хендлер может прилететь уже после plugin_end(), и какие-либо действия там чаще всего выполнять уже не целесообразно. Я бы мог представить ситуацию, что я послал асинхронный запрос - мне после plugin_end() приходит ответ, и мне в результате нужно сделать ещё один запрос - могу ли я в этом случае его сделать пока ещё карта не поменялась/сервер не выключен? Я не знаю, не разбирался с этим, не пробовал, т.к. не было нужды. Но если технически запрос ещё можно отправить в таком случае, например, освобождённый тупл в plugin_end() уже не позволит это сделать.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу