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

Откуда:
Сообщений: 751
Имеется ДЛЛ С++ взаимодействующая с приложением через C-API. Пусть в ДЛЛ три экспорт функции и класс cDB, отвечающий за все взаимодействие с БД Sqlite.
1. Приложение вызывает 1-ю функцию ДЛЛ - создается объект класса cDB и через функции cDB что-то пишется в БД.
2. Приложение вызывает время от времени 2-ю функцию ДЛЛ и через cDB пишет данные в БД.
3. приложение вызывает время от времени 3-ю функцию ДЛЛ и через cDB пишет данные в БД. Однако, нет, не пишет. ДЛЛ видит объект cDB, работает с его функциями, однако не видит соединение с БД в cDB, однако, соединение при этом есть и работает. При этом Sqlitе свободна от какого либо взаимодействия с чем либо, для чего функция м.б. заблокирована - что не дает эффекта.
Надо отметить, что функция 2 работает без каких либо проблем (видимо работает в одном потоке с функциями по п.1.
Приложение многопоточное, и в каком потоке какая функция ДЛЛ будет вызываться, и сколько их вообще, потоков в приложении, неизвестно.

Пока видится решение в создании соединения с БД для каждого потока приложения, но неизвестно сколько их, потоков. Не исключено также, что одна и та-же функция в в ДЛЛ может вызываться разными событиями и потоками в приложении.
С другой стороны, потоки, вроде бы, должны работать в одном адресном пространстве и видеть переменные, ведь видим объект cDB в п.3.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
24 июл 19, 21:14    [21933883]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Ошибся, следует читать.
При этом Sqlitе свободна от какого либо взаимодействия с чем либо, для чего функция по п.2 м.б. заблокирована - что не дает эффекта.
24 июл 19, 21:17    [21933885]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Barlone
Member

Откуда:
Сообщений: 1347
При вызове из тестового приложения последовательно из одного потока все функции работают?
Что с одновременным обращением из разных потоков? https://sqlite.org/threadsafe.html
24 июл 19, 21:28    [21933890]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Пока видится решение в создании соединения с БД для каждого потока приложения, но неизвестно сколько их, потоков.
ну, это известно. Что коннект в дровах не потокозащищеный объект.
Поэтому программист обязан либо при старте потока внутрь дать коннект, либо каждый поток берет коннект из пула коннектов.
Главное чтобы они не дрались между собой, два потока к одному коннекту.
24 июл 19, 21:28    [21933891]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Barlone,
Круто у sqllite..
автор
Serialized . В сериализованном режиме SQLite может безопасно использоваться несколькими потоками без ограничений.
24 июл 19, 21:33    [21933893]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp, не дерутся. Полностью блокируем вызовы БД потока по п.2. По п.3 соединение с БД не видит, хотя по структурам и вспомогательным классам созданным new в классе cDB все отрабатывается.
24 июл 19, 21:38    [21933896]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Barlone, из 1-го потока работают, из 2-го нет. Хотя БД сконфигурирована под фулмьютех, пока вопрос одновременности не ставился, пока все по очереди.
24 июл 19, 21:41    [21933898]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
Логируйте с выводом в лог id потока. Хорошим логировщиком.
24 июл 19, 21:54    [21933901]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dimitry Sibiryakov
Member

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

YUBA
"Есть многое на свете, друг Горацио, что и не сразу в голову придет."

"Есть муторный процесс на свете этом, который кличут все отладкой."

"Видит" - "не видит" это бесполезный эмоциональный бред.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 751
PetroNotC Sharp, И что даст логгирование? Решение? Ошибиться в программе там просто уже негде. Все выкинуто, функции п.2 и п.3 сделаны абсолютно примитивными и идентичными.
sqlite3 *db=0;

int func1() // работает
{
const char* SQL = "CREATE TABLE IF NOT EXISTS tab1(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}

int func2() //вызывается из другого потока, не видит соединения с БД.
{
// er= sqlite3_prepare_v2(db, "begin;", 10, &ppStmt, &tail); // остатки старого кода. на этом уже затыкался.
const char* SQL = "CREATE TABLE IF NOT EXISTS tab2(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}

Dimitry Sibiryakov, что здесь отлаживать? Никаких внешних данных.
24 июл 19, 22:27    [21933913]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Dimitry Sibiryakov
Видит" - "не видит" это бесполезный эмоциональный бред.
+1
Аффтар.Приведите свои мысли в порядок и сформулируйте вопрос топика. Коротко!
24 июл 19, 22:46    [21933928]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Все выкинуто
еще выкидывайте. char SQL ЗАЧЕМ?
24 июл 19, 22:50    [21933931]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp
YUBA
Все выкинуто
еще выкидывайте. char SQL ЗАЧЕМ?
Это уже не смешно.
24 июл 19, 22:51    [21933932]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
PetroNotC Sharp
пропущено...
еще выкидывайте. char SQL ЗАЧЕМ?
Это уже не смешно.
разумеется.
Стек ошибки где?
Что значит "не видит"?
Так домохозяйки говорят.
24 июл 19, 22:54    [21933936]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp, не поможет вам стек. Понял, только, что вы любитель демагогии. До свидания.
24 июл 19, 23:03    [21933941]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
Добро пожаловать в форум!
Хорошо что я вас привел в чувство).
Работайте!
24 июл 19, 23:09    [21933945]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9473
PetroNotC Sharp
Круто у sqllite..
автор
Serialized
Что крутого в организации очереди для строго последовательного исполнения запросов???
25 июл 19, 04:44    [21933985]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Barlone
Member

Откуда:
Сообщений: 1347
YUBA
PetroNotC Sharp, И что даст логгирование? Решение? Ошибиться в программе там просто уже негде. Все выкинуто, функции п.2 и п.3 сделаны абсолютно примитивными и идентичными.
sqlite3 *db=0;

int func1() // работает
{
const char* SQL = "CREATE TABLE IF NOT EXISTS tab1(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}

int func2() //вызывается из другого потока, не видит соединения с БД.
{
// er= sqlite3_prepare_v2(db, "begin;", 10, &ppStmt, &tail); // остатки старого кода. на этом уже затыкался.
const char* SQL = "CREATE TABLE IF NOT EXISTS tab2(a0 real, a1 real, a2 real, a3);";
sqlite3_exec(db, SQL, 0, 0, &err);
}

Dimitry Sibiryakov, что здесь отлаживать? Никаких внешних данных.
Так не должно бытью Ну SQLite в исходниках же, зайдите уже внутрь sqlite3_exec и посмотрите, что там происходит.
25 июл 19, 06:27    [21933991]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Basil A. Sidorov,
Если так то это банально конечно.
Вот смотри.
Беру постгри базу и обязан делать коннект на поток. Так как не Thread-safe.
А тут заявлено что пофигу.
Круче?
25 июл 19, 07:09    [21933999]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dima T
Member

Откуда:
Сообщений: 14080
Посмотри что возвращает sqlite3_threadsafe()
25 июл 19, 08:09    [21934011]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Basil A. Sidorov,
Фигня этот режим многопоточности в данной конкретной бд.
Это не поможет если в клиентском коде бардак.
http://www.prog.org.ru/topic_30824_45.html
Имхо
25 июл 19, 08:29    [21934013]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Ну а бардак в прикладном коде потому что
YUBA
но неизвестно сколько их, потоков. Не исключено также, что одна и та-же функция в в ДЛЛ может вызываться разными событиями и потоками в приложении.

Надо четко знать, что у нас thread safe и что нет.
Как MS в шарпе ввел даже слово async чтобы помечать))
25 июл 19, 08:33    [21934016]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Dima T
Посмотри что возвращает sqlite3_threadsafe()
Сразу и смотрел =1. С этой стороны проблем не должно быть.
25 июл 19, 12:11    [21934223]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Dima T
Посмотри что возвращает sqlite3_threadsafe()
Сразу и смотрел =1. С этой стороны проблем не должно быть.
ваши проблемы мы "не видим", так же как вы и пишите в заголове сообщения.
Увы.
25 июл 19, 12:39    [21934245]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dima T
Member

Откуда:
Сообщений: 14080
YUBA
Dima T
Посмотри что возвращает sqlite3_threadsafe()
Сразу и смотрел =1. С этой стороны проблем не должно быть.

Если правильно понимаю, то
https://sqlite.org/compile.html#threadsafe
SQLITE_THREADSAFE=1 sets the default threading mode to Serialized.

Получается все должно работать.

Возможно проблема совсем в другом, например обращение к БД происходит до открытия БД. Ошибка какая в err ?
25 июл 19, 13:11    [21934290]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Dima T
Возможно проблема совсем в другом, например обращение к БД происходит до открытия БД. Ошибка какая в err ?

Точно, что после открытия БД. err - не знаю. Try...catch надо ставить, а как и куда err вытащить неизвестно. Само приложение пишет, что не определен указатель - а единственный указатель, это и есть sqlite3 *db - сейчас не могу посмотреть в оригинале.
25 июл 19, 13:44    [21934342]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Try...catch надо ставить, а как и куда err вытащить неизвестно.
тяжелый случай.

YUBA
пишет, что не определен указатель

Скрин сюда того где ОНО САМО пишет.

YUBA
сейчас не могу посмотреть в оригинале.
вот когда будешь рядом с компом и продоложим.
25 июл 19, 13:47    [21934347]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
Найди место на самом вверху в ГУИ, где происходит mess про указатель.
Потом в коде например buttonClick....
Оберни все это место try.
Всё.
25 июл 19, 13:52    [21934353]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dima T
Member

Откуда:
Сообщений: 14080
YUBA
Dima T
Возможно проблема совсем в другом, например обращение к БД происходит до открытия БД. Ошибка какая в err ?

Точно, что после открытия БД. err - не знаю. Try...catch надо ставить, а как и куда err вытащить неизвестно. Само приложение пишет, что не определен указатель - а единственный указатель, это и есть sqlite3 *db - сейчас не могу посмотреть в оригинале.

Не должно быть никаких исключений. Проверяй в начале
if(db == 0) ... база еще не обкрыта


err тоже указатель, ты как его объявил?

Пример обработки ошибок отсюда
    sqlite3 *db;
    char *err_msg = 0;
    
    int rc = sqlite3_open(":memory:", &db);
    
    if (rc != SQLITE_OK) {
        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }
    
...
    
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    
    if (rc != SQLITE_OK ) {
        fprintf(stderr, "Failed to create table\n");
        fprintf(stderr, "SQL error: %s\n", err_msg);
        sqlite3_free(err_msg);
    } else {
        fprintf(stdout, "Table Friends created successfully\n");
    }
25 июл 19, 14:03    [21934370]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Dima T
Не должно быть никаких исключений
сама база не выдаёт каких нибудь. Data not found... /FK?
25 июл 19, 14:28    [21934394]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dima T
Member

Откуда:
Сообщений: 14080
PetroNotC Sharp
Dima T
Не должно быть никаких исключений
сама база не выдаёт каких нибудь. Data not found... /FK?

Насколько понимаю для этого сделан возврат ошибок.
Если не путаю, SQLite написана на C, а в C нет исключений, они в С++. Да и в документации ни слова про исключения.
25 июл 19, 14:36    [21934402]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Dima T,
Да. Они где то выше уровнем.
Я по диагонали гугл глянул - андроид и т.д.
Еще странно что про try автор первый сказал).
25 июл 19, 14:44    [21934415]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
Dima T, да, понятно. Но это ДЛЛ - нет там ни консоли ни ГУИ. Куда я stdout?
Пока все штатно, я могу в приложение текст возвратить, и оно выведет (открытие БД, в частности, и пр. - это все сделано). В данном случае до текста не доходит, и выбрасывается - не определен указатель - это поток приложения пишет, до err дело не доходит. Даже на err= sqlite3_prepare_v2(db, "begin;", 10, &ppStmt, &tail); Если оставить обе функции, то одна пишет в БД, вторая исключение дает. ДЛЛ продолжает исполняться. И получаем вывод типа:
ОК, не опр ук-тель, не опр ук-тель, не опр ук-тель, не опр ук-тель, ОК. Функции уже просто идентичны.
25 июл 19, 14:47    [21934422]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Но это ДЛЛ - нет там ни консоли ни ГУИ. Куда я stdout?
в лог файл все пишут.

YUBA
могу в приложение текст возвратить,
наверно сначала вызов самой длл идет? Вот там stdout есть и перехват exception есть.
25 июл 19, 14:56    [21934434]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dima T
Member

Откуда:
Сообщений: 14080
YUBA
Dima T, да, понятно. Но это ДЛЛ - нет там ни консоли ни ГУИ. Куда я stdout?

В файл тоже нельзя писать? Навтыкай записей после каждой строки, пиши все подряд, что вызываешь, какие значения параметров.

fflush() не забывай вызывать.
25 июл 19, 15:01    [21934446]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp
наверно сначала вызов самой длл идет? Вот там stdout есть и перехват exception есть.

Вызов функций в ДЛЛ - все в норме. Вся работа с БД в классе, поток класс видит, все функции класса штатно исполняются, затык только на указателе sqlite3 *db;
Может это имеет значение - поток в котором коннектится ДЛЛ и создается подключение к БД отсоединен (detach), и крутится в ДЛЛ в цикле. Через него вызываются доступные функции приложения. Остальные потоки - события приложения.
25 июл 19, 15:18    [21934475]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Вызов функций в ДЛЛ - все в норме.
мы это не видим. Если ГУИ стартануло поток, то он пройдет через 100 длл вызовов и вернется опять в ГУИ.

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

Откуда:
Сообщений: 2446
YUBA
detach
если есть тяжелые работы, то ТОЛЬКО ДЛЯ НИХ берется ОДИН ПОТОК НА РАБОТУ.
Либо из пула, либо заготовить штук 20, либо при аттаче потока он сам берет коннект до конца работы.
25 июл 19, 15:34    [21934511]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Остальные потоки - события приложения.
всё ГУИ это один основной поток. И все события в нем тоже.
Итого у вас один основной и один дополнительный.
Вот проверяйте это по логам с выводом id thread
25 июл 19, 15:38    [21934520]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3151
PetroNotC Sharp
Dima T
Не должно быть никаких исключений
сама база не выдаёт каких нибудь. Data not found... /FK?


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

Откуда:
Сообщений: 2446
Ролг Хупин,
Вау! Шарпист по теме слово сказал)
25 июл 19, 15:41    [21934528]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
Возможно у вас основной полез в доп.поток или наоборот. Напрямую они лезть не должны.
25 июл 19, 15:42    [21934530]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp
если есть тяжелые работы, то ТОЛЬКО ДЛЯ НИХ берется ОДИН ПОТОК НА РАБОТУ.
Либо из пула, либо заготовить штук 20, либо при аттаче потока он сам берет коннект до конца работы.
Детач поток выдается нам приложением для подключения ДЛЛ, конфигурации и пр. Завершение этого потока - эквивалентна отключению ДЛЛ от приложения. Его надо держать до конца работы с ДЛЛ.
25 июл 19, 15:46    [21934540]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3151
PetroNotC Sharp
Ролг Хупин,
Вау! Шарпист по теме слово сказал)


П. да, ты сказал слово
Фильм "Сережа", 1960
25 июл 19, 15:53    [21934555]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
PetroNotC Sharp
если есть тяжелые работы, то ТОЛЬКО ДЛЯ НИХ берется ОДИН ПОТОК НА РАБОТУ.
Либо из пула, либо заготовить штук 20, либо при аттаче потока он сам берет коннект до конца работы.
Детач поток выдается нам приложением для подключения ДЛЛ, конфигурации и пр. Завершение этого потока - эквивалентна отключению ДЛЛ от приложения. Его надо держать до конца работы с ДЛЛ.
тут не знаю. Смотрите логи как выше сказал на вызов перекрестный. Будет райзе, либо ваша ошибка.
25 июл 19, 15:54    [21934556]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
Dimitry Sibiryakov
Member

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

YUBA
Детач поток выдается нам приложением для подключения ДЛЛ, конфигурации и пр. Завершение
этого потока - эквивалентна отключению ДЛЛ от приложения.

Ага, вот она, базовая ошибка архитектуры, приводящая к гонкам потоков и обращению к ещё не
инициализированным объектам.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 751
Dimitry Sibiryakov
Ага, вот она, базовая ошибка архитектуры, приводящая к гонкам потоков и обращению к ещё не
инициализированным объектам.
Ерунда, все инициализировано. Никаких ага.)
25 июл 19, 17:54    [21934671]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Dimitry Sibiryakov,
Даже цели этого действа не прнимаю. У нас, что, из экзешника нельзя поток создать и внутри. длл вызвать?
25 июл 19, 18:09    [21934677]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
Dimitry Sibiryakov
Ага, вот она, базовая ошибка архитектуры, приводящая к гонкам потоков и обращению к ещё не
инициализированным объектам.
Ерунда, все инициализировано. Никаких ага.)
а что за ошибку тогда обсуждаем?
25 июл 19, 18:09    [21934678]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp
а что за ошибку тогда обсуждаем?
почитайте тему с начала, повторяться не буду. И кто сказал, что где-то ошибка?
Здесь надо не ошибку искать, а думать, как писать в БД через одно соединение из разных потоков.
25 июл 19, 18:17    [21934681]     Ответить | Цитировать Сообщить модератору
 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]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

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

Откуда:
Сообщений: 2446
YUBA
PetroNotC Sharp, см. предыдущие страницы темы.
ну ожидайте ответов, программист)
25 июл 19, 22:09    [21934854]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp, а я и не жду.)) Пока все мои темы на форуме решались самостоятельно. Но, тем не менее, обсуждение полезно, отбрасывается множество версий.
25 июл 19, 22:14    [21934858]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
Блин, ну логика то у вас должна быть?
... Решались самостоятельно, но версии отбрасывались форумом))).
25 июл 19, 22:22    [21934872]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp, здесь пока нет рабочих версий.)) Есть, в основном демагогия.
25 июл 19, 22:24    [21934875]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

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

Откуда:
Сообщений: 751
PetroNotC Sharp, в этой теме лишь 2 человека что-то реально думают. Остальные пока надувают щеки и делают умный вид.)) Вы, в том числе.)
25 июл 19, 22:37    [21934881]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA,
Ваше мнение очень важно для нас (с)
25 июл 19, 22:43    [21934885]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
YUBA
Member

Откуда:
Сообщений: 751
PetroNotC Sharp, до свидания. Не понял сразу, что вы пофлудить пришли.
25 июл 19, 22:46    [21934888]     Ответить | Цитировать Сообщить модератору
 Re: Sqlite в многопоточной программе.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
YUBA
PetroNotC Sharp, до свидания. Не понял сразу, что вы пофлудить пришли.
это у тебя любимая отговорка, когда надо всего то null в переменной найти.
Отпишитесь потом)
Удачи!
Модератор: Закрыто


Сообщение было отредактировано: 26 июл 19, 01:08
25 июл 19, 22:52    [21934892]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4      [все]
Все форумы / C++ Ответить