[VB] 2 gedeeltes code naast elkaar draaien

Pagina: 1
Acties:

  • solomo
  • Registratie: Juli 2001
  • Niet online

solomo

.....huh?

Topicstarter
Ik ben bezig met een programma en loop nu tegen een probleem op, ik wil 2 methodes naast elkaar laten lopen.

de situatie is alsvolgt:
ik heb 1 methode met een lus erin die moet stoppen bij bepaalde user input uit een andere methode waarin gewerkt wordt.

hoe doe je zoiets?

* solomo hoopt dat de vraag duidelijk is

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Hebben we hiet hier over multi-threading? Ja.
Maar je zit eigenlijk met een probleem: multithreading is in VB niet echt mogelijk (zover ik weet).

https://fgheysels.github.io/


  • solomo
  • Registratie: Juli 2001
  • Niet online

solomo

.....huh?

Topicstarter
damn, dat wou ik niet horen :(

verklaart wel warom ik er eigelijk niets over heb gevonden :D

* solomo draait nog een paar rondes op de draaistoel om dan maar ten minste misselijk te worden


kan het echt niet :'(

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
[topic=517120/1/25]
:)

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:14

mulder

ik spuug op het trottoir

Dus dat een gebruiker bv op een knopje klikt er een lusje stopt?

- Check is het te stoppen lusje of een boolean nog true is. Zo niet: exit? (Hint voor lus: DoEvents)
- In die andere methode (On_click?) zet je die boolean op false

oogjes open, snaveltjes dicht


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:14

mulder

ik spuug op het trottoir

*kuch*

oogjes open, snaveltjes dicht


  • solomo
  • Registratie: Juli 2001
  • Niet online

solomo

.....huh?

Topicstarter
DoEvents staat al in de lus :)

het probleem is dus dat het niet met de boolean werkt doordat het uiteindelijke stoppen gebeurt door een messagebox die dus nog moet worden aangeroepen wat niet lukt omdat de code van de lus word doorlopen :(

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 03-09 15:18

Crazy D

I think we should take a look.

Op maandag 10 juni 2002 14:29 schreef Solomo het volgende:
DoEvents staat al in de lus :)

het probleem is dus dat het niet met de boolean werkt doordat het uiteindelijke stoppen gebeurt door een messagebox die dus nog moet worden aangeroepen wat niet lukt omdat de code van de lus word doorlopen :(
:?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private m_KappenNou As Boolean

Private Sub DoeIetsLangs()
    m_KappenNou = False
    Dim l as long
    For l = 1 To 999999999
      ' doe iets
      DoEvents
      If m_KappenNou Then Exit For
    Next 'l
End Sub

Private Sub cmdKappen_Click()
    If MsgBox("Weet u zeker blah?", vbQuestion or vbYesNo) = vbYes Then
      m_KappenNou = True
    End If
End Sub

:?

Exact expert nodig?


  • solomo
  • Registratie: Juli 2001
  • Niet online

solomo

.....huh?

Topicstarter
Op maandag 10 juni 2002 14:48 schreef Crazy_D het volgende:

[..]

:?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private m_KappenNou As Boolean

Private Sub DoeIetsLangs()
    m_KappenNou = False
    Dim l as long
    For l = 1 To 999999999
      ' doe iets
      DoEvents
      If m_KappenNou Then Exit For
    Next 'l
End Sub

Private Sub cmdKappen_Click()
    If MsgBox("Weet u zeker blah?", vbQuestion or vbYesNo) = vbYes Then
      m_KappenNou = True
    End If
End Sub

:?
ja zoiets ongeveer, hier is dus het probleem dat bijde methodes niet tegelijk kunnen lopen :( of zie iki dat verkeert?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 03-09 15:18

Crazy D

I think we should take a look.

Op maandag 10 juni 2002 15:13 schreef Solomo het volgende:
ja zoiets ongeveer, hier is dus het probleem dat bijde methodes niet tegelijk kunnen lopen :( of zie iki dat verkeert?
Klopt dat is gewoon een beperking van VB, naja met veel klooien kan je wel met threads werken maar ik denk niet dat je dat wilt, als dat echt zo dringend nodig is bouw dan heel de app in een taal waarin je wel threads hebt.

In principe is dat de VB way to go: DoEvents zorgt ervoor dat je app niet "freezed", op het moment dat de MsgBox getoont wordt stopt de loop, maar ja dat is niet anders ;)
Afhankelijk van wat er in de loop gebeurt is dat goed genoeg (was het bij mij altijd wel), en anders wordt het tijd om een nieuwe taal te leren cq. te upgraden naar .net (naja zelfs vb.net is zowat een compleet nieuwe taal om te leren als je vb6 gewend bent...).

Exact expert nodig?


Verwijderd

Je kunt een ActiveX EXE gebruiken.

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Op maandag 10 juni 2002 16:18 schreef dev het volgende:
Je kunt een ActiveX EXE gebruiken.
Ja? is het hier dan wel mee mogelijk???
(en zo ja, hoe???)

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:14

mulder

ik spuug op het trottoir

Op maandag 10 juni 2002 16:18 schreef dev het volgende:
Je kunt een ActiveX EXE gebruiken.
Please suprise me.

oogjes open, snaveltjes dicht


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Er zijn verscheidene manieren om Multithreading te bereiken.

De simpeleste methode is een Timer. Ja zo een inefficient geval. Een timer loopt namelijk in zn eigen thread.

Als je de timer op interval 1 zet, kun je de timer op enaled zetten en draait de code (relatief) tegelijk met de andere.

Trouwens, ik snap het probleem niet. Elke gameloop met een spel in VB eindigt op deze manier.

ff Gecheckt, dit werkt dus perfect:
code:
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
Option Explicit
Private m_KappenNou As Boolean

Private Sub Form_Load()
    Me.Show
    DoEvents

    DoeIetsLangs
End Sub

Private Sub DoeIetsLangs()
    m_KappenNou = False
    Dim l As Long
    For l = 1 To 999999999
      ' doe iets
      DoEvents
      Me.Caption = l
      If m_KappenNou Then Exit For
    Next 'l
    Me.Caption = "gestopt op: " & l
End Sub

Private Sub cmdKappen_Click()
    If MsgBox("Weet u zeker blah?", vbQuestion Or vbYesNo) = vbYes Then
      m_KappenNou = True
    End If
End Sub

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 03-09 15:18

Crazy D

I think we should take a look.

Op maandag 10 juni 2002 16:18 schreef dev het volgende:
Je kunt een ActiveX EXE gebruiken.
Klopt, ik hen daar ook weleens mee zitten spelen maar ik vond het nogal brak werken. Grootste nadeel vond ik dat ik het niet voor elkaar kreeg om de thread niet bij de class_initialize te laten beginnen, maar na aanroepen van een functie. Maar bij wij werkte dat alleen als de "lange operatie" direct begon in de class_initialize, en dat vond ik dusdanig brak dat ik het sindsdien met doeventjes oplos. Dat werkt prima, tenzij je "echt echt" meerdere threads nodig hebt, maar dan zou ik niet voor een VB oplossing kiezen...

Exact expert nodig?

Pagina: 1