/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Active-X EXE-kontroller og flertrådede VB ~
Fra : Tomas Christiansen


Dato : 21-09-02 11:08

Hej allesammen

Jeg har kreeret et ikke-helt-lille program, som starter nogle
instanser af en Active-X EXE-kontrol.

Det specielle ved denne kontrol er, at når den bliver startet op,
initierer den et callback til sig selv. Derved kan jeg få den til at
køre i sin egen tråd og rent faktisk få CPU-tid _samtidig_ med at
hovedprogrammet kører. Det kan være ret smart.

Denne kontrol (kaldet FileMonitor) udløser så - når noget bestemt
sker - et (eller hedder det én) event, som aktiverer hovedprogrammet
(kaldet EMDI). EMDI registrerer nu at "noget" skal gøres, men gør
heller ikke mere i første omgang.

I EMDI ligger en timer, som ofte checker om "noget" skal gøres, og er
der det, bliver den rette procedure startet. Når denne procedure er
slut, checkes om der er "noget andet" som skal gøres, og er der ikke
det, gør EMDI ikke mere.

Nu sker der en gang imellem det, at når FileMonitor fortæller EMDI at
"noget" skal gøres, så er det ligesom at den tråd, som FileMonitor
kører i, i stedet "hopper over" og afvikler EMDI-programmet. EMDI
afvikles nu i 2 (to, two, zwei, dos, doe) tråde!!! Disse forsøger
begge - på samme tid - at det samme "noget", og det går gruelig galt!

En lillepudsighed er, at EMDI hele tiden skriver en tidsstemplet linie
i en log-fil, før, under og efter at "noget" gøres, og i
log-proceduren holder en statist variabel øje med at samme tidsstempel
(der benyttes tusindedele sekunder) ikke benyttes to gange. Hvis det
er ved at ske, ventes blot 10 ms inden et nyt tidsstempel hentes frem.
Men når de to tråde kører samtidig, kan der opstå to linier i logfilen
samme tidstempel. Desuden kan linierne blive brudte (halve), hvilket
jævnfør koden ikke burde kunne lade sig gøre.

Med andre ord: Det er fungerer simpelthen ikke ordentligt!

Er der nogen af jer derude, som er stødt ind i lignende problemer,
eller har hørt om noget lignenede - eller endnu bedre: har et forslag
til hvordan, jeg kan slippe af med problemet.

Jeg kan selvfølgelig ved at omkode systemet, så at der ikke benyttes
en ekstern Active-X konmonent, undgå problemerne, men... (suk,
Microsoft igen...)

-------
Tomas


 
 
Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste