[VB6] Programma laten draaien zonder Focus

Pagina: 1
Acties:

  • Luppie
  • Registratie: September 2001
  • Laatst online: 01-03 23:21

Luppie

www.msxinfo.net

Topicstarter
Ben nu al een jaartje bezig met het bouwen van programmatjes in VB6.

De laatste tijd komen daar ook programmatjes bij die min of meer op de achtergrond moeten draaien. Op dit moment ben ik met een projectje bezig die om de 5 minuten de tijd via winsock (UDP) naar een gameserver toestuurt. (Wordt nl. vaak bij ons op de gameserver gevraagd "Hoe laat is het....")

Ik heb het hele programma klaar en hij werkt als een tierelier, echter als het programma gestart is en hij verliest z'n focus (bijv. als ik een ander programma opstart) dan lijkt het wel alsof mijn programma er mee ophoud.

Selecteer ik vervolgens het programma weer zodat mijn programma het actieve venster is dan gaat ie gewoon weer verder.

Is dit een eigenschap van VB6 of moet ik nog iets regelen zodat mijn programma door blijft lopen ook al is het niet het actieve venster ?

Ik weet dat script-requests hier uit den boze zijn en dat ik eerst moet zoeken, maar ik heb geen flauw idee waarop ik moet zoeken. Heb het geprobeerd in google met de zoekterm VB6+Focus maar helaas geen resultaat.

Heb je iets aan mijn antwoord ? Een thumbs-up wordt zeker op prijs gesteld.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Wat je vraagt zou gewoon perfect moeten werken: het enige effect van 'focus' op performance is dat de focused application op een actieve GUI lichtelijk 'geniced' wordt in de CPU time, maar dat zou je alleen moeten merken als je de focus verplaatst naar een hangende app die 100% cpu-tijd trekt zonder te yielden.

Draai je op een 9x-systeem of op NT-kernel (NT/2k/XP)? In het 2e geval zou ik het programma sowieso als service uitvoeren ipv desktop progsel (dan is het tevens niet meer gebonden aan iemand's ingelogd zijn).

Professionele website nodig?


  • Luppie
  • Registratie: September 2001
  • Laatst online: 01-03 23:21

Luppie

www.msxinfo.net

Topicstarter
curry684 schreef op 12 januari 2004 @ 10:00:
Wat je vraagt zou gewoon perfect moeten werken: het enige effect van 'focus' op performance is dat de focused application op een actieve GUI lichtelijk 'geniced' wordt in de CPU time, maar dat zou je alleen moeten merken als je de focus verplaatst naar een hangende app die 100% cpu-tijd trekt zonder te yielden.
Ik weet niet precies wat je hier mee bedoeld, enige toelichting gewenst. B)
curry684 schreef op 12 januari 2004 @ 10:00:
Draai je op een 9x-systeem of op NT-kernel (NT/2k/XP)? In het 2e geval zou ik het programma sowieso als service uitvoeren ipv desktop progsel (dan is het tevens niet meer gebonden aan iemand's ingelogd zijn).
Zelf wil ik dit tooltje op W2k3 draaien, maar als het tooltje klaar is wil ik hem ook beschikbaar stellen aan iedereen die er gebruik van wil maken. Het draaien als service vindt ik zelf niet echt een oplossing. De bedoeling is om er later meer functionaliteit aan te geven, waarbij een UserInterface ook beschikbaar moet zijn.
Ook moet bij het opstarten van dit tooltje een password worden ingegeven die nodig is om met de gameserver te communiceren.

Heb je iets aan mijn antwoord ? Een thumbs-up wordt zeker op prijs gesteld.


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 27-05 19:21

johnwoo

3S-GTE

Cobra_Lup schreef op 12 januari 2004 @ 10:32:
[...]

Ik weet niet precies wat je hier mee bedoeld, enige toelichting gewenst. B)
De applicatie met focus krijgt iets meer CPU tijd, zodat de user interface iets vlotter/directer aanvoelt (en dat merk je normaal gesproken niet, maar alleen als je PC het erg druk heeft)
Zelf wil ik dit tooltje op W2k3 draaien, maar als het tooltje klaar is wil ik hem ook beschikbaar stellen aan iedereen die er gebruik van wil maken. Het draaien als service vindt ik zelf niet echt een oplossing. De bedoeling is om er later meer functionaliteit aan te geven, waarbij een UserInterface ook beschikbaar moet zijn.
Ook moet bij het opstarten van dit tooltje een password worden ingegeven die nodig is om met de gameserver te communiceren.
Mja, toch lijkt zo'n achtergrondproces me uitermate geschikt om als service uit te voeren. Je gameserver draait tenslotte ook als jij niet bent ingelogd op de PC, en dan wil je eigenlijk ook de tijd laten updaten. Je zou een apart progje kunnen maken om de service te beheren. Dat is de gebruikelijke manier; je service draait op de achtergrond zonder iemand lastig te vallen (ook als er niemand is ingelogd), en met een apart progje kun je z'n parameters, zoals in jouw geval gebruikersnaam/wachtwoord, instellen. Een alternatief is je service 'interactief' te maken, zodat hij (configuratie-) venstertjes mag openen op je desktop.

Meestal doe ik de 'server'/ het achtergrondproces zelf als NT service in C (efficient met CPU/geheugen), en maak dan in VB (makkelijk GUI klikken :P) het beheerprogsel :)

En als je het dan toch als gewone applicatie maakt, gebruik dan een tray icon ofzo, zodat je niet steeds bij het inloggen geconfronteerd wordt met een venster :)

[ Voor 8% gewijzigd door johnwoo op 12-01-2004 11:18 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Luppie
  • Registratie: September 2001
  • Laatst online: 01-03 23:21

Luppie

www.msxinfo.net

Topicstarter
Even als achtergrond informatie:
De gameserver waarvoor dit tooltje is, is Rainbow Six 3 RavenShield.

De server zelf draaid niet als service, hij draaid in een Administrative Terminal Sessie op een W2k3 server. Bij anderen draaid ie op een W2k of XP bak welke altijd aangelogd is (gelocked uiteraard)

Op zich is het dus niet erg dat het scherm zichtbaar is, een tray icon is inderdaad wel zo mooi. (heb ik wel eens gemaakt dus dat gaat wel lukken)

Echter heb ik wel het idee dat als mijn programmascherm niet actief is dat mijn timerfunctie niet doorloopt. Ik zal vanavond het programma ff ombouwen zodat ie in de tray komt te staan om te kijken of ie dan wel door blijft lopen.

Programmeren in C is voor mij helaas geen optie (nog nooit gedaan) ik ben nog druk lerende in VB6 en mijn volgende stap die ik wil maken ik VB.NET

Heb je iets aan mijn antwoord ? Een thumbs-up wordt zeker op prijs gesteld.


Verwijderd

Maar dat is toch simpel te controleren? Zet gewoon in je timerfunctie wat code die bijv. een label update op je form of in een log file wat wegschrijft. Zie je na het minimaliseren en weer restoren dat je label is opgehoogd met het aantal malen dat de timer is uitgevoerd of je logfile groter wordt dan weet je meteen dat alles gewoon werkt.
Iig is het niet zo dat normaal gesproken je timer stopt als je form is geminimaliseerd.
Pagina: 1