Grey83
не пишу плагины с весны 2022
- Сообщения
- 8,552
- Реакции
- 5,029
Весь
Создаёшь строковые переменные каждые итерации цикла.
Ну и ещё БД нужно лочить во время обращения к ней.
И вообще для чего было добавлять инклюд
Немного почистил и оптимизировал код.
Настройка голосового чата с ботами убрана (они будут игнорироваться кодом).
Теперь при неудачном коннекте к БД будет выполняться весь код, кроме взаимодействия с БД.
Код взаимодействия с БД не менял.
В общем как-то так.
OnPluginEnd()
можно удалять, т.к. при завершении работа плагина SM и так удалит ArrayList и Database из памяти.Вики SMWhen a plugin unloads, all of its Handles are automatically destroyed.
Сообщения автоматически склеены:
Создаёшь строковые переменные каждые итерации цикла.
Ну и ещё БД нужно лочить во время обращения к ней.
У тебя метод Database.Query() используется в 4 функциях.В одном и том же соединении можно запускать как поточные, так и не-поточные запросы.
Однако без надлежащих мер предосторожности вы можете повредить сетевой поток (даже если он локальный), поврежденную память или иным образом вызвать сбой в драйвере SQL.
Чтобы решить эту проблему, SourceMod имеет блокировку базы данных.
Блокировка выполняется через SQL_LockDatabase и SQL_UnlockDatabase.
Всякий раз, когда выполняется какая-либо из следующих операций, не связанных с потоком в базе данных, абсолютно необходимо заключить всю операцию с блокировкой:
Эмпирическое правило: если ваша операция будет использоваться для подключения к базе данных, она должна быть заблокирована до завершения операции.
- Сопряжения SQL_Query (и SQL_FetchMoreResults)
- SQL_FastQuery
- SQL_PrepareQuery
- Сопряжения SQL_Bind и SQL_Execute
И вообще для чего было добавлять инклюд
clientprefs
и использовать вместо него функционал dbi
?
Сообщения автоматически склеены:
Немного почистил и оптимизировал код.
OnClientPostAdminCheck()
заменено на OnClientAuthorized()
(потому что только так можно использовать GetClientAuthId()).Настройка голосового чата с ботами убрана (они будут игнорироваться кодом).
Теперь при неудачном коннекте к БД будет выполняться весь код, кроме взаимодействия с БД.
Код взаимодействия с БД не менял.
В общем как-то так.
SM1.13:
//// voice_users 1.4.sp
//
// Z:\voice_users 1.4.sp(169) : warning 209: function has explicit 'int' tag but does not return a value
// 169 | public int MenuHandler_VoiceMenu(Menu menu, MenuAction action, int param1, int param2)
// --------------------^
//
// Z:\voice_users 1.4.sp(169) : warning 209: function has explicit 'int' tag but does not return a value
// 169 | public int MenuHandler_VoiceMenu(Menu menu, MenuAction action, int param1, int param2)
// --------------------^
// Code size: 16024 bytes
// Data size: 4644 bytes
// Stack/heap size: 17560 bytes
// Total requirements: 38228 bytes
//
// 2 Warnings.
//
// Compilation Time: 0,66 sec
// ----------------------------------------
//// voice_users 1.4_fix.sp
//
// Code size: 15552 bytes
// Data size: 4484 bytes
// Stack/heap size: 17216 bytes
// Total requirements: 37252 bytes
//
// Compilation Time: 0,08 sec
// ----------------------------------------
Вложения
Последнее редактирование: