Я не программист, просто эникей.
Есть формочка в которой производятся манипуляции с базами - создание, удаление, импорт, экспорт.
С созданием и удалением все просто - операции быстрые и формочка не зависает и даже при создании базы прекрасно отображается процесс в прогресс баре, да и код собственного говоря помещен в саму формочку из-за его малого объема.
Но дальше я начал заниматься реализаций импорта данных базы из файла. Так как код обещал быть достаточно больших размеров(куча проверок и прочей лабуды) я решил вынести всё это в отдельный объект который по нажатию на кнопочку будет создаваться и отрабатывать.
Суть работы объекта на пальцах:
-Задаем путь до файлов
-Чистим базу
-По порядку передаем файлы на обработку
---Обработка
----цикл Пока не конец файла
-----Читаем строку
-----Записываем в базу строку
----конец цикла
---Конец обработки
Код написан, он даже почти работает(осталось допили парсинг нескольких файлов и пофиксить мелки баги) но на время работы объекта формочка напрочь зависает(не отвечает) - как следствие не отображается прогресс в прогрессбаре и лог не пишется в окошко. Вызов объекта состоит из всего одного метода, все остальные действия производятся внутри. Несмотря на то что окно зависло и полное ощущение того что все плохо. По данным с мускуля видно что программа работает и запись в базу идет.
Как сделать так что бы формочка не умирала на время выполнения импорта? Вынести в отдельный поток и общаться сигналами-слотами?
Если мы получили строку то лучше её сразу в базу кидать или лепить один большой запрос для допустим 100 срок и только потом его отправлять? Хотелось бы что бы это по памяти не вылезло хотя бы за 100 мегобайт. Пока это операция при последовательной отправке строк не вылазит за 50 мегов.
multithreading, mysql, qt, работа с файлами