windows - Kør Firebird-forespørgsel i en baggrundstråd og gem resultatsættet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil sætte udførelsen af ​​en forespørgsel med parametre i en trådsikker klasse i delphi-2009.


Jeg navigerer i google, men jeg har ikke fundet lige hvad jeg ønskede.


Tak

Bedste reference


Jeg har fundet ud af, at de fleste database-API'er kun er trådsikker på forbindelsesniveauet. Firebird kan være anderledes, men ved hjælp af InterBase flere (8 +) år siden var det ikke tråd sikkert. Opdatering: Jeg har verificeret Firebird er kun tråd sikker på forbindelsesniveau. [3]


Det betyder, at du typisk skal undgå at bruge en enkelt forbindelse fra mere end en tråd på samme tid. Udførelsen af ​​en forespørgsel mod en given forbindelse gælder.
Undgå at have to forespørgsler i forskellige tråde, der kører mod den samme forbindelse.


Men når du har sagt det, hvis du har to forbindelser, kan du have to forespørgsler kørende på samme tid.


Arten af ​​dit spørgsmål ser ud til at være, hvordan man overfører data på en sikker måde til en tråd, og selvom du specifikt har brug for en database, gælder dette generisk, uanset hvad der er indeholdt i en tråd.


Den nemmeste måde at videregive data på er oprettelsen, du kan oprette tråd suspenderet, indstil forskellige egenskaber på din TThread efterkommer. Genoptag derefter tråden.
Din egentlige kode, der gør arbejdet i tråden, skal kaldes fra Execute() metoden.


Hvis du skal dele data mellem tråde, skal du pakke ind i en af ​​de forskellige strukturer, der muliggør synkronisering, såsom en kritisk sektion, Mutex eller Semaphore.


Delphi har biblioteksindpakninger til hver af disse i SyncObjs.pas-enheden.