![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() У меня вопрос, делал синхронизацию(synchronize) при работе с Label и memo из потока, но все равно баги были страшные пришлось убрать, с чем могло быть связанно? не из за того что в этот момент могла быть работа из основного кода с этим же memo?
|
#2
|
|||
|
|||
![]() сомнительно, этот метод как раз и предназначен для того, что бы основной поток и дополнительный не мешались. Вообще, для синхронизации преднвзначен объект TCriticalSection.
|
#3
|
||||
|
||||
![]() показал бы "не правильно работающий код" с Synchronize?
Пишу программы за еду. __________________ |
#4
|
||||
|
||||
![]() Код:
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); ну и в программе этот поток ежесекундно раз по 3-5 вызывался изначально все было нормально, через минут 5 потом "началось" |
#5
|
||||
|
||||
![]() а если оставить только это:
Код:
var addmesseg: String; begin addmesseg:='(' + DateTimeToStr(Now()) + ') '+'отправлен запрос в плагин=> 100'; Memo2.Lines.Add(addmesseg); // writeln(logfile1,addmesseg); // inc(statistik1); Label1.Caption:=IntToStr(99); end; Пишу программы за еду. __________________ |
#6
|
||||
|
||||
![]() не знаю, такое не могу протестировать с той нагрузкой с которой должно работать.
|
#7
|
||||
|
||||
![]() просто без этого то код бесполезный совершенно)
Код:
@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); А вот для такой работы с бд, Код:
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
|
||||
|
||||
![]() Query создаётся внутри потока, или на форме?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#9
|
||||
|
||||
![]() не понял...
Query уже настроено на форме ни там ни там не создаю |
#10
|
|||
|
|||
![]() Цитата:
Угу, конечно будут глюки. Пользуй CriticalSection для синхронизации. Synchronize обеспкчиает только синхронизации отрисовки. |
#11
|
||||
|
||||
![]() отрисовки? это простые добавления? в memo и т.д.?
А чем CriticalSection лучше основного потока? ведь если критическая занята все рано ждем. Последний раз редактировалось ALexandr555, 03.07.2011 в 21:54. |
#12
|
||||
|
||||
![]() во время выполнения запросов в потоке отключай визуальные компоненты:
DataSource.Enabled:=False; Пишу программы за еду. __________________ |
#13
|
||||
|
||||
![]() Спасибо, а нельзя работать без визуального? без DBGrid, седалал запрос на поиск и он возвращает найденое, или nill в случае если не нашли.
|
#14
|
||||
|
||||
![]() да запросто.
Пишу программы за еду. __________________ |
#15
|
||||
|
||||
![]() просто гугл по запросу "Не визуальная работа с бд" и "работа с бд без dbgrid" молчит
![]() |