Helaas krijg ik de volgende foutmeldingen niet op mijn eigen computer of de computers waar ik het op test (sommige die het programma gebruiken krijgen dit dus), maar als ik een item op mijn queue wil plaatsen (in een thread) dan krijg ik 1 van deze foutmeldingen:
Heeft iemand enig idee waar het aan kan liggen dat ik 1 van die foutmeldingen krijg, en of dit aan de PushItem functie ligt, of dat het een andere oorzaak heeft.
Om er voor te zorgen dat de queue 'veilig' is in de thread heb ik de class een extend van TQueue gemaakt, met oa. de PushItem die er voor zorgt met behulp van een CriticalSection veilig wordt aangesproken:Type : EPrivilege
Message: Privileged instruction
Type : EAccessViolation
Message: Access violation at address [...] in module [...] read of address [...]
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| // Queue: // Declaratie private CS : TCriticalSection; // [...] procedure TThreadSafeQueue.PushItem(AItem: Pointer); begin CS.Acquire(); try inherited; finally CS.Release(); end; end; // Background Thread: // Declaratie: Buffer: TThreadSafeQueue; // [...] procedure TBackgroundThread.Add(Object: TObject); begin Buffer.PushItem(Object); end; // De code die de add aanroept in de hoofdthread // blabla onClick... BackgroundThread.Add(HetObject); |
Heeft iemand enig idee waar het aan kan liggen dat ik 1 van die foutmeldingen krijg, en of dit aan de PushItem functie ligt, of dat het een andere oorzaak heeft.
[ Voor 3% gewijzigd door Scorpion op 14-02-2004 19:47 ]