Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Sqlite в многопоточной программе.  [new]
Dima T
Member

Откуда:
Сообщений: 14080
YUBA
Dimitry Sibiryakov
Ага, вот она, базовая ошибка архитектуры, приводящая к гонкам потоков и обращению к ещё не
инициализированным объектам.
Ерунда, все инициализировано. Никаких ага.)

Я тоже к этому диагнозу склоняюсь. Не там ты ошибку ищешь.

Ты пойми что если бы ты корректно вызывал SQLite, то получал ошибки так как задумано разработчиками SQLite, а не исключения от ОС.
25 июл 19, 18:37    [21934713]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
думать, как писать в БД через одно соединение из разных потоков.
ого. ТЗ уже сменилось.
Через одни ворота это просто, но не практично. Почему не через 10 соединений?
25 июл 19, 18:46    [21934718]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
1. Два потока к одному ресурсу = ставим критическую секцию.
2. У тебя гуи в базу не пишет. Значит если нет ошибки, то в базу пишет ОДИН фоновый поток.
Опять гадаем на кофе.
25 июл 19, 18:51    [21934721]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Dima T
Я тоже к этому диагнозу склоняюсь. Не там ты ошибку ищешь.
Ты пойми что если бы ты корректно вызывал SQLite, то получал ошибки так как задумано разработчиками SQLite, а не исключения от ОС.
Ну, хорошо.
Две идентичные функции в одном классе (cDB) пишущие в БД и вызываемые из разных потоков. Обе функции видят функциональность класса. Одна функция стабильно пишет в БД, другая, в другом потоке, стабильно не видит указатель sqlite *db; - уберем работу с базой, и она будет штатно выполняться. Разница только в том, что инициализация класса, БД и вызов 1-й функции производится в одном потоке, а вызов 2-й функции в другом. Если бы они были в разных адресных пространствах, то и класс cDB второй поток тоже бы не видел, но он его и его переменные видит, кроме указателя на БД.
И как можно некорректно вызвать Sqlite? - Open, и далее, либо exec(), либо prepare(). Но опять, функции сейчас сделаны примитивней некуда, и абсолютно идентичны.
25 июл 19, 19:03    [21934729]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp
ого. ТЗ уже сменилось.
Через одни ворота это просто, но не практично. Почему не через 10 соединений?
Читайте доки на Sqlite - такая возможность есть без каких либо побочных эффектов. В нашем случае пока им даже неоткуда взяться.))
25 июл 19, 19:07    [21934734]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48614

YUBA
Разница только в том, что инициализация класса, БД и вызов 1-й функции производится в
одном потоке, а вызов 2-й функции в другом.

И вот этот вызов выполняется раньше, чем первый поток дойдёт до инициализации указателя.
Поскольку ничто не гарантирует очерёдности их выполнения.

Posted via ActualForum NNTP Server 1.5

25 июл 19, 19:10    [21934736]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Dimitry Sibiryakov, еще раз, это ерунда.
25 июл 19, 19:12    [21934737]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48614

YUBA
это ерунда.

Это реальность многопоточного программирования, детка.
Пока в одном потоке выполняется sqlite* db = sqlite_init(), второй поток уже доходит до
sqlite_exec(db) и получает ещё непроинициализированный db.

Пока ты этого не поймёшь - не суйся в потоки.

Posted via ActualForum NNTP Server 1.5

25 июл 19, 19:19    [21934740]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
PetroNotC Sharp
ого. ТЗ уже сменилось.
Через одни ворота это просто, но не практично. Почему не через 10 соединений?
Читайте доки на Sqlite - такая возможность есть без каких либо побочных эффектов. В нашем случае пока им даже неоткуда взяться.))
сказал тот кто пришел с побочкой.
25 июл 19, 19:28    [21934748]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Dimitry Sibiryakov, еще раз - ахинея.
вывод в приложениии - ОК, ошибка, ошибка, ошибка, ... ОК, ошибка, ....., ОК.
ОК - запись в БД произведена. Ошибка (что-то там - unknown unhandler....) - не видит указателя на БД. Где вы здесь увидели неинициализированную БД?
Сейчас пока вообще все сломал.)
25 июл 19, 19:29    [21934749]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Dimitry Sibiryakov, еще раз, это ерунда.

YUBA
Если бы они были в разных адресных пространствах,
ты только про адресное в курсе?
А про стек потока?
25 июл 19, 19:33    [21934756]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Dimitry Sibiryakov, еще раз - ахинея.
красным напиши. Или тут шрифт побольше делают дети.
25 июл 19, 19:34    [21934757]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Сейчас пока вообще все сломал.)
ты не торопись. Завтра залогируй и приходи.
25 июл 19, 19:35    [21934758]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp, там логировать нечего все известно с точностью до оператора prepare() или любого другого обращения к db. Ниче нового, кроме того, что указателя нет мы не увидим, а это и так известно.
25 июл 19, 20:02    [21934782]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp
ты только про адресное в курсе?
А про стек потока?
Точно, угадал. У меня вообще другая специальность и это не программирование.)
25 июл 19, 20:07    [21934787]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
PetroNotC Sharp
ты только про адресное в курсе?
А про стек потока?
Точно, угадал. У меня вообще другая специальность и это не программирование.)
ну тогда перед глобальным указателем на базу попробуй поставить
volatile
Чтобы компилятор ее в стек не переместил.
25 июл 19, 20:19    [21934798]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
там логировать нечего все известно с
я например не понял, почему 2 потока, если один для гуи но не походов же в базу?
В базу ехе фоновый создает. Так?
25 июл 19, 20:22    [21934799]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3151
YUBA
PetroNotC Sharp
ты только про адресное в курсе?
А про стек потока?
Точно, угадал. У меня вообще другая специальность и это не программирование.)


вы мент?
25 июл 19, 20:24    [21934800]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
У тебя указатель на базу NULL.
Значит надо кусок кода инициализации логи с id потока.
Они глобальный pointer одновременно ставят?
25 июл 19, 20:25    [21934801]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
специальность

Просто терминология странная с этим словом "не видит")))) LOL
Ничего личного.
assert("не видит") ;н
25 июл 19, 20:41    [21934811]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Barlone
Member

Откуда:
Сообщений: 1347
YUBA
Dimitry Sibiryakov, еще раз - ахинея.
вывод в приложениии - ОК, ошибка, ошибка, ошибка, ... ОК, ошибка, ....., ОК.
ОК - запись в БД произведена. Ошибка (что-то там - unknown unhandler....) - не видит указателя на БД. Где вы здесь увидели неинициализированную БД?
Сейчас пока вообще все сломал.)
Вы код который выводит это самое "что-то там - unknown unhandler...." и что перед этим делается покажите.
25 июл 19, 21:18    [21934831]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Barlone
Вы код который выводит это самое "что-то там - unknown unhandler...." и что перед этим делается покажите.

Уже показывал, любое обращение к БД - _exec() или _prepare(), после чего выбрасывается из функции. Выводит не мой код, выводит приложение к которому подключена ДЛЛ, по собственной инициативе.
25 июл 19, 21:24    [21934834]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Barlone
Member

Откуда:
Сообщений: 1347
YUBA
Выводит не мой код, выводит приложение к которому подключена ДЛЛ, по собственной инициативе.
А вы с помощью плясок с бубном пытаетесь исправить ошибку в чужом коде, которого не видите? Ну удачи.
25 июл 19, 21:29    [21934837]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Barlone, плевать мне, есть у них ошибки, нет у них ошибок. Мне в любом случае работать с ним надо.
25 июл 19, 21:38    [21934842]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Уже показывал,
еще раз покажите
YUBA
Выводит не мой код,

Дак показывали или не можете или не хотите?
Троичная логика)
25 июл 19, 21:59    [21934849]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / C++ Ответить