Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.07.2011, 04:02
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию Синхронизация потоков

У меня вопрос, делал синхронизацию(synchronize) при работе с Label и memo из потока, но все равно баги были страшные пришлось убрать, с чем могло быть связанно? не из за того что в этот момент могла быть работа из основного кода с этим же memo?
Ответить с цитированием
  #2  
Старый 03.07.2011, 08:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

сомнительно, этот метод как раз и предназначен для того, что бы основной поток и дополнительный не мешались. Вообще, для синхронизации преднвзначен объект TCriticalSection.
Ответить с цитированием
  #3  
Старый 03.07.2011, 10:40
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

показал бы "не правильно работающий код" с Synchronize?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 03.07.2011, 11:28
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
 addmesseg:='(' + DateTimeToStr(Now()) + ') '+'отправлен запрос в плагин=> '+ UIN;
 Memo2.Lines.Add(addmesseg);
 writeln(logfile1,addmesseg);
 inc(statistik1);
 Label1.Caption:=IntToStr(statistik1);
 @plugExec := GetProcAddress(PPluginInfo(listKomand.Items[n1])^.handle,'PluginExec');
 Result:=PlugExec(UIN, Msg,PPluginInfo(listKomand.Items[n1])^.Index);
 i:=random(10);
   case i of
    0: ;
    1: Result:=Result+#10#13+rekl1.text;
    2: Result:=Result+#10#13+rekl2.text;
    3: Result:=Result+#10#13+rekl3.text;
    4: Result:=Result+#10#13+rekl4.text;
    5: Result:=Result+#10#13+rekl5.text;
    6: Result:=Result+#10#13+rekl6.text;
    7: Result:=Result+#10#13+rekl7.text;
    8: Result:=Result+#10#13+rekl8.text;
    9: Result:=Result+#10#13+rekl9.text;
  end;
form1.MessageSend(UIN,Result,nomer);
вот это у меня было в процедуре которую вызывал через Synchronize
ну и в программе этот поток ежесекундно раз по 3-5 вызывался
изначально все было нормально, через минут 5 потом "началось"
Ответить с цитированием
  #5  
Старый 03.07.2011, 14:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а если оставить только это:
Код:
var
  addmesseg: String;
begin
  addmesseg:='(' + DateTimeToStr(Now()) + ') '+'отправлен запрос в плагин=> 100';
 Memo2.Lines.Add(addmesseg);
// writeln(logfile1,addmesseg);
// inc(statistik1);
 Label1.Caption:=IntToStr(99);
end;
будут глюки?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 03.07.2011, 15:27
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

не знаю, такое не могу протестировать с той нагрузкой с которой должно работать.
Ответить с цитированием
  #7  
Старый 03.07.2011, 17:46
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

просто без этого то код бесполезный совершенно)

Код:
 @plugExec := GetProcAddress(PPluginInfo(listKomand.Items[n1])^.handle,'PluginExec');
 Result:=PlugExec(UIN, Msg,PPluginInfo(listKomand.Items[n1])^.Index);
 i:=random(10);
   case i of
    0: ;
    1: Result:=Result+#10#13+rekl1;
    2: Result:=Result+#10#13+rekl2;
    3: Result:=Result+#10#13+rekl3;
    4: Result:=Result+#10#13+rekl4;
    5: Result:=Result+#10#13+rekl5;
    6: Result:=Result+#10#13+rekl6;
    7: Result:=Result+#10#13+rekl7;
    8: Result:=Result+#10#13+rekl8;
    9: Result:=Result+#10#13+rekl9;
  end;
form1.MessageSend(UIN,Result,nomer);
вот так стабильно работает, перед вызовом потока делал работу с memo и label, не желательно конечно но обойдусь (хотя есть идея переписать некоторые моменты отказавшись от VCL компонентов, заменить ListBox'ы на StringList'ы к примеру)

А вот для такой работы с бд,
Код:
Query.SQL.text:='UPDATE bdbot SET INFObd=:par1 where UINbd=:par2';
Query.Parameters.ParamByName('par1').Value:=pacet.mesg;
Query.Parameters.ParamByName('par2').Value:=pacet.param2;
Query.ExecSQL;
или
Код:
Query.SQL.text:='Select UINbd from bdbot where nomber=:id';
Query.Parameters.ParamByName('id').Value:=Msg;
Query.Open;
синхронизация необходима?
Ответить с цитированием
  #8  
Старый 03.07.2011, 18:22
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Query создаётся внутри потока, или на форме?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #9  
Старый 03.07.2011, 18:59
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

не понял...
Query уже настроено на форме ни там ни там не создаю
Ответить с цитированием
  #10  
Старый 03.07.2011, 20:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от ALexandr555
не понял...
Query уже настроено на форме ни там ни там не создаю

Угу, конечно будут глюки.
Пользуй CriticalSection для синхронизации. Synchronize обеспкчиает только синхронизации отрисовки.
Ответить с цитированием
  #11  
Старый 03.07.2011, 20:41
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

отрисовки? это простые добавления? в memo и т.д.?
А чем CriticalSection лучше основного потока? ведь если критическая занята все рано ждем.

Последний раз редактировалось ALexandr555, 03.07.2011 в 21:54.
Ответить с цитированием
  #12  
Старый 04.07.2011, 10:01
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

во время выполнения запросов в потоке отключай визуальные компоненты:
DataSource.Enabled:=False;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #13  
Старый 04.07.2011, 17:27
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Спасибо, а нельзя работать без визуального? без DBGrid, седалал запрос на поиск и он возвращает найденое, или nill в случае если не нашли.
Ответить с цитированием
  #14  
Старый 04.07.2011, 19:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

да запросто.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #15  
Старый 04.07.2011, 19:54
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

просто гугл по запросу "Не визуальная работа с бд" и "работа с бд без dbgrid" молчит
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025