Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2018, 12:46   #1
artemavd
Старожил
 
Регистрация: 05.06.2008
Сообщений: 4,184
Радость TThread (потоки) при загрузке файлов в базу SQL Server - как загрузить файл размером 100 мб в базу данных SQL Server, обработать и выгрузить его из базы?

Добрый день!
Пытаюсь начать работать с потоками, т.к. стало интересно: как загрузить файл размером 100 мб в базу данных SQL Server, потом выгрузить его оттуда, произвести кое какие действия. Получается 3 этапа.
Сделал так:
Код:
//Объявил класс потока в модуле, где основная процедура, в которой выполняются все 3 этапа:
  TMyThread = class(TThread)
    private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure Working;
  end;

....
procedure TMyThread.Working;
begin
  //тут делаются 3 этапа эти
  EditOneFile;
end;

procedure TMyThread.Execute;
begin
  Synchronize(Working);
end;

//не уверен в правильности этого:
procedure NewProcedure;
begin
  MyThread:=TMyThread.Create(False);
  MyThread.Priority:=tpHigher;
  MyThread.FreeOnTerminate:=True;
end;
В последнем блоке кода я хотел запустить свой поток.
То, есть, нажимается кнопка, запускается процедура NewProcedure, в которой должен отработать поток.

Проблема в том, что не отрабатывает что ли.
Хотя бы потому что на форме у меня расположен компонент анимации, который просто крутится, давая понять юзеру, что программа не зависла.


Подскажите что я не так делаю?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.11.2018, 13:11   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Код:
  MyThread:=TMyThread.Create(False);
//после Create с False поток сразу запустится и до следующей команды уже может и завершится
  MyThread.Priority:=tpHigher;
Код:
procedure TMyThread.Execute;
begin
  Synchronize(Working);
end;
Какой смысл весь код потока синхронизировать?
Цитата:
расположен компонент анимации, который просто крутится, давая понять юзеру, что программа не зависла.
Он может и в своем собственном потоке крутиться, смотря какой )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2018, 13:16   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,503
По умолчанию

Так чтобы понять запускается ли добавьте логирование или брекпоинт поставьте.

Но код бессмысленный, Synchronize же просто приведет к выполнению всего в UI потоке.

И что за странные имена у функций и процедур? Их обычно стараются делать глаголами. StartThread, Work/DoWork (вторая конечно вообще не нужна потому что и так есть Execute).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.11.2018, 18:34   #4
artemavd
Старожил
 
Регистрация: 05.06.2008
Сообщений: 4,184
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
  MyThread:=TMyThread.Create(False);
//после Create с False поток сразу запустится и до следующей команды уже может и завершится
  MyThread.Priority:=tpHigher;
Код:
procedure TMyThread.Execute;
begin
  Synchronize(Working);
end;
Какой смысл весь код потока синхронизировать?
Он может и в своем собственном потоке крутиться, смотря какой )
Ну, а как надо тогда? Без синхронизации?
Мне надо, чтобы анимация крутилась, и все 3 этапа обратаывалтсь, чтобы программа не висела))
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.11.2018, 20:03   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,503
По умолчанию

Синхронизировать работу с UI компонентами, а не все подряд.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.11.2018, 04:01   #6
artemavd
Старожил
 
Регистрация: 05.06.2008
Сообщений: 4,184
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Синхронизировать работу с UI компонентами, а не все подряд.
Как?
А можно ли выводить информацию о том, сколько процентов прошло от загрузки файла в базу? Что-то типа прогрессбара, отображающего ход загрузки.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 16.11.2018, 08:33   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

А как и какими средствами загружаешь?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.11.2018, 09:19   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,503
По умолчанию

Код:
while ...
begin
  DoSomething();
  Synchronize(UpdateProgress);
end;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать базу данных в sql server Shuhrat94 SQL, базы данных 0 19.12.2017 19:46
как загрузить путь к файл в БД sql server при помощи C# Samsung100 C# (си шарп) 2 13.05.2014 10:29
sql server+delph,при попытке сохранить базу в дельфи выдает ошибку adotable dataset not in edit or insert betirsolt БД в Delphi 3 07.05.2010 20:44
Подключение к базу данных SQL Server на VB.Net uchenik Помощь студентам 0 22.03.2010 10:50
перенести базу SQL Server S_Yevgeniy БД в Delphi 4 29.11.2009 17:13


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS