🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346178

Problem z synchronizacją wątków i DB

#346178
From: ExM
Date: Tue, 21 Nov 2017 15:10
35 lines
2730 bytes
Hej,
mam taki nietypowy problem:

Mam sobie bazę danych MSSQL (komponenty Devart - choć to raczej bez znaczenia)
Dane odświeżam sobie w osobnym wątku
  query.Active:=False; / query.Active:=True;  czy tam: query.Refresh;

query ma Zdarzenie: AfterOpen i AfterRefresh które powoduje modyfikację napisów na formie głównej aby więc to prawidłowo zrealizować powinienem użyć procedury Synchronize - inaczej program się najczęściej zwiesza / wysypuje. 

Tylko jak to zrobić z procedurami które odpalają się jako zdarzenia w wyniku działania wątku który wykonuje otwarcie czy odświeżenie wyników query?

Mogę odłączyć na czas otwierania tabelki te procedury i po odświeżeniu danych ponownie je podłączyć np tak:


//procedura uruchamiana w osobnym wątku 
procedure test(obiekt: TMSQuery);
var s,t:TDataSetNotifyEvent;
Begin
  s:=obiekt.AfterOpen;
  obiekt.AfterOpen:=nil;
  t:=obiekt.AfterScroll;
  obiekt.AfterScroll:=nil;  
  ... 
  obiekt.Active:=False;
  obiekt.Active:=True;
  ... 
  obiekt.AfterScroll:=t;
  obiekt.AfterOpen:=s;
end;

Tylko wtedy nie wykona się procedura AfterOpen - która powinna się wykonać ale za pomocą Synchronize.

Wywołanie Synchronize(TThreadMethod(obiekt.AfterOpen)) - powoduje wysypanie się aplikacji tak jak by nie następowała synchronizacja (zwis/koniec aplikacji)

Jak powinienem zrobić to prawidłowo aby nie dochodziło do konflitów między watkami?
Technical Details
Message-ID: <90a4ea00-38f5-45fc-b22c-7db238f908e2@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!i6no2764008itb.0!news-out.google.com!x87ni1731ita.0!nntp.google.com!i6no2764002itb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.36.179.70 with SMTP id z6mr1227922iti.36.1511277046924;        Tue, 21 Nov 2017 07:10:46 -0800 (PST)
X-Received: by 10.157.42.99 with SMTP id t90mr734185ota.5.1511277046516; Tue, 21 Nov 2017 07:10:46 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!i6no2764008itb.0!news-out.google.com!x87ni1731ita.0!nntp.google.com!i6no2764002itb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Tue, 21 Nov 2017 07:10:46 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.173.208.186; posting-account=doVJ9goAAADBJ8SWJkb9r0xXWw28WhQg
NNTP-Posting-Host: 5.173.208.186
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <90a4ea00-38f5-45fc-b22c-7db238f908e2@googlegroups.com>
Subject: Problem z synchronizacją wątków i DB
From: ExM <grupywyt-nijto@mv.net.pl>
Injection-Date: Tue, 21 Nov 2017 15:10:46 +0000
X-Received-Body-CRC: 1660130461
X-Received-Bytes: 2902
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit