Some fundamental questions:
I think pgAlerter itsself is threadsave. Its using the same connection as the MainThread of the application. (Or does it need a own Connection?) (Example: User 1 is calling a huge query, user 2 calls a Notification for user 1/User 1 is registered to recieve - at this time)
Is the OnEvent (OnNotification) is syncronized with the MainThread? If i do "MessageBox", etc? (Or do we need to Syncronize the MainThread for Painting issues and so on ourself)
Its a bit confusing that in some of the logs i see procedures/lines that doesnt have a relation to your PGAlerter (e.g. a CalcFields Exception).
It does not seem that the OnEvent Event is called. There was no Notification on the Backend at this time.
Perhaps you can give us some hints on what we should look for, or what we need to do, to handle Multi Threads with PGAlerter.
Here some Log Information: (copy and insert into notepad because of fixed fonts, you see the formated text very well there. See Line 7)
Code: Select all
|------------------------------------------------------------------------------------------------------------|
| |
|Running Thread: ID=1984; Priority=0; Class=TPgSQLNotificationsThread |
|------------------------------------------------------------------------------------------------------------|
|7C91DF58|ntdll.dll | | |NtWaitForSingleObject | |
|5003D7CC|rtl150.bpl |System.pas | |_UStrCatN | |
|01CD85A0|SysWAWIXE.bpl |ClassLager.pas |TWarenEingangsschein |_CalcFields |785[7] |
|7C91D2A8|ntdll.dll | | |NtDuplicateObject | |
|7C80DEFD|kernel32.dll | | |DuplicateHandle | |
|7C80DF0E|kernel32.dll | | |DuplicateHandle | |
|71A0150A|WS2HELP.dll | | |WahReferenceContextByHandle| |
|71A130A8|WS2_32.dll | | |select | |
|71A14D1A|WS2_32.dll | | |WSARecv | |
|71A14CB5|WS2_32.dll | | |WSARecv | |
|71A32E9E|wsock32.dll | | |recv | |
|7C91DF48|ntdll.dll | | |ZwWaitForMultipleObjects | |
|7C91DF58|ntdll.dll | | |NtWaitForSingleObject | |
|7C91DF4E|ntdll.dll | | |NtWaitForSingleObject | |
|7C929B1E|ntdll.dll | | |RtlpWaitForCriticalSection | |
|0034A6D2|pgdac150.bpl |Pgsqlprotocol.pas |TPgSQLProtocol |ProcessMessageQueue | |
|0034A658|pgdac150.bpl |Pgsqlprotocol.pas |TPgSQLProtocol |ProcessMessageQueue | |
|00375172|pgdac150.bpl |Pgclasses.pas |TPgSQLNotificationsThread |Execute | |
|50037581|rtl150.bpl |System.pas | |_ReallocMem | |
|------------------------------------------------------------------------------------------------------------|
|Calling Thread: ID=216; Priority=0; Class=; [Main] |
|------------------------------------------------------------------------------------------------------------|
|500ADA50|rtl150.bpl |Classes.pas |TThread |Resume | |
|500ADA48|rtl150.bpl |Classes.pas |TThread |Resume | |
|00374DA8|pgdac150.bpl |Pgclasses.pas |TPgSQLNotificationsHandler|EventIndex | |
|00374EA7|pgdac150.bpl |Pgclasses.pas |TPgSQLNotificationsHandler|Listen | |
|00374E80|pgdac150.bpl |Pgclasses.pas |TPgSQLNotificationsHandler|Listen | |
|00374928|pgdac150.bpl |Pgclasses.pas |TPgSQLNotificationsHandler|RegisterEvents | |
|00374526|pgdac150.bpl |Pgclasses.pas |TPgSQLAlerter |Start | |
|0071E7A9|dac150.bpl |Daalerter.pas |TDAAlerter |Start | |
|0071E724|dac150.bpl |Daalerter.pas |TDAAlerter |Start | |
|0071EE88|dac150.bpl |Daalerter.pas |TDAAlerter |SetActive | |
|007A081C|SysDBXE.bpl |UCimNotifications.pas|TCimNotify |Connect |65[4] |
|007A07C0|SysDBXE.bpl |UCimNotifications.pas|TCimNotify |Connect |61[0] |
|007AAE09|SysDBXE.bpl |udm1.pas |TDM1 |DataBase1AfterConnect |494[13]|
|006E3EB0|dac150.bpl |Dbaccess.pas |TCustomDAConnection |Disconnect | |
|00793468|SysDBXE.bpl |UDataModul_SysDB.pas |TCimDM_SysDB |SetStartScreenStatus |134[2] |
|006E3EA4|dac150.bpl |Dbaccess.pas |TCustomDAConnection |Connect | |
|006E3EA0|dac150.bpl |Dbaccess.pas |TCustomDAConnection |Connect | |
|007AF090|SysDBXE.bpl |udm1.pas |TDM1 |Connect |1422[6]|
|007AF080|SysDBXE.bpl |udm1.pas |TDM1 |Connect |1416[0]|
|004B047F|ProdatSQL.exe |UHauptForm.pas |THauptForm |OpenDatabaseExecute |748[70]|
|004AFD50|ProdatSQL.exe |UHauptForm.pas |THauptForm |OpenDatabaseExecute |678[0] |
|004B305C|ProdatSQL.exe |UHauptForm.pas |THauptForm |LoginTimerTimer |1265[4]|
|502D2EC3|vcl150.bpl |Extctrls.pas |TTimer |Timer | |
|5003A47C|rtl150.bpl |System.pas | |_CallDynaInst | |
|502D2DA7|vcl150.bpl |Extctrls.pas |TTimer |WndProc | |
|7E368A0B|USER32.dll | | |DispatchMessageW | |
|7E368A01|USER32.dll | | |DispatchMessageW | |
|50358A04|vcl150.bpl |Forms.pas |TApplication |ProcessMessage | |
|50358B3A|vcl150.bpl |Forms.pas |TApplication |HandleMessage | |
|50358B30|vcl150.bpl |Forms.pas |TApplication |ProcessMessages | |
|50358D9C|vcl150.bpl |Forms.pas |TApplication |Run | |
|004C6EFC|ProdatSQL.exe |ProdatSQL.dpr | | |45[7] |
--------------------------------------------------------------------------------------------------------------