windows callback

Windows specific forum
User avatar
DoubleDutch
Addict
Addict
Posts: 3220
Joined: Thu Aug 07, 2003 7:01 pm
Location: United Kingdom
Contact:

windows callback

Post by DoubleDutch »

Does the windows callback operate like a seperate thread?

The reason I'm asking is that I access a linked list during both the main app and the callback. At the beginning of the callback I save the current list position and restore it at the end.

If it operates like a thread though, this will not be enough.

If so, is there a safe way to access a linked list during the callback or do I have to use a signal/wait method?

-Anthony
https://deluxepixel.com <- My Business website
https://reportcomplete.com <- School end of term reports system
User avatar
DoubleDutch
Addict
Addict
Posts: 3220
Joined: Thu Aug 07, 2003 7:01 pm
Location: United Kingdom
Contact:

Post by DoubleDutch »

Looks like it is dangerous to do this...

Anyhow solved it with a little help from the irc channel... :)

Here is the info, incase some of you have a similar problem:

The list is a structure of a hitem address and a string...
I make SubjectStart the address of the 1st element (if any)...

Code: Select all

; this is in the callback
If SubjectStart
  Unsafelist=#True
  hitem=*tvCD\nmcd\dwItemSpec
  addr=SubjectStart
  textaddr=0
  Repeat
    If PeekL(addr+8)=hitem         ; 1st item in structure
      textaddr=PeekL(addr+12)     ; 2nd item in structure
      If textaddr
        text$=PeekS(textaddr)
      Else
        textaddr=#True
        text$="@"   ; this is for me to see if something is wrong
      EndIf
    Else
      addr=PeekL(addr)       ; next item in list
    EndIf
  Until textaddr Or addr=0
  Unsafelist=#False
Else
  text$="$"  ; list is empty!
EndIf
In the main program i simple use the list as normal, but if I'm deleting an element i wait until Unsafelist=#false before I do it.

If I clear the list I first clear SubjectStart then wait for Unsafelist to be #false.

I think this should be good enough to stop virtually anything going wrong.
https://deluxepixel.com <- My Business website
https://reportcomplete.com <- School end of term reports system
Trond
Always Here
Always Here
Posts: 7446
Joined: Mon Sep 22, 2003 6:45 pm
Location: Norway

Post by Trond »

Just a wild dumb question: How do you ensure that not both threads writes to the flag variable at once?
User avatar
DoubleDutch
Addict
Addict
Posts: 3220
Joined: Thu Aug 07, 2003 7:01 pm
Location: United Kingdom
Contact:

Post by DoubleDutch »

What I should probabily do is make the flag turing on a critical section. But it will effect system timers, etc...

Notice that I clear SubjectStart before I wait for the flag - thus there is a double protection here.

It seems to work okay, I made it run for quite a while in an extreme situation and nothing flagged up as wrong.

-Anthony
https://deluxepixel.com <- My Business website
https://reportcomplete.com <- School end of term reports system
Post Reply