Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Muuttujat muistissa

vb1235 [03.09.2006 17:42:02]

#

Tilanne: teen esim. vb6- ohjelman joka 1 sek välein lisää luku-muuttujaa "luku" yhdellä ja antaa luku-muuttujan arvon labeliin.

No, kun sitten tämän ohjelman ajaa ja "unohtaa" sen noin 10 minuutiksi taustalle suorittamaan itseään samalla vaikka surffaten netissä niin sitten tämä vb-ohjelma jumiutuu täysin (lopettaa laskemisen jne).. Missä syy?? onko niin että vb-ohjelmalle varatut muuttujat jotenkin kuormittaa liikaa muistia vai mikä on ?

Antti Laaksonen [03.09.2006 18:48:43]

#

Tein tällaisen testin, joka toimi moitteettomasti:

Dim luku As Integer

Private Sub Timer1_Timer()
    luku = luku + 1
    Caption = luku
End Sub

Yhden muuttujan käsittely kerran sekunnissa ei varmasti vie niin paljon tehoja, että ohjelma jumiutuisi sen takia. Vika on jossain muualla.

vb1235 [03.09.2006 18:58:12]

#

Ok, olet oikeassa, keksin tuon esimerkin mutta tällä koodilla: se jumiutuu (ilmoittaa värin hiiripointerin mukaan):

Private Const SRCCOPY = &HCC0020
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

  Dim dhwnd As Long
  Dim dhdc As Long
  Dim color As Long
  Dim x As Long
  Dim y As Long
  Dim mouseX, mouseY As Long

Dim xy As POINTAPI
Dim wnd As Long, wndc As Long

Private Sub Command1_Click()
Timer1.Interval = 0

Dim xxx, yyy As Long
    xxx = Text1.Text
    yyy = Text2.Text
      wnd = WindowFromPoint(xxx, yyy)
      dhwnd = GetDesktopWindow
      dhdc = GetWindowDC(dhwnd)

    color = GetPixel(dhdc, xxx, yyy)
    Label5 = color

End Sub

Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 40
End Sub

Private Sub Timer1_Timer()

  GetCursorPos xy
  wnd = WindowFromPoint(xy.x, xy.y)
  Label2 = xy.x & ", " & xy.y

    dhwnd = GetDesktopWindow
    dhdc = GetWindowDC(dhwnd)

    color = GetPixel(dhdc, xy.x, xy.y)
    Label1 = color
End Sub

mod.edit: kooditagit

'formille: 4kpl labeleja, 2 textboxia ja commandbutton

Antti Laaksonen [03.09.2006 20:41:19]

#

MSDN:n mukaan funktion GetWindowDC jälkeen pitää kutsua lopuksi funktiota ReleaseDC. Tämä voi olla ongelman syy.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta