DoLoop zu olangsam

Diskutiere DoLoop zu olangsam im Developer Network Forum im Bereich Hardware & Software Forum; Hi Ich muss eine Do Loop Schleife für eine Berechnung etwa ein paar hunderttausend mal wiederholen. Dieser Vorgang dauert allerdings 10min. Kann...
  • DoLoop zu olangsam Beitrag #1
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Hi

Ich muss eine Do Loop Schleife für eine Berechnung etwa ein paar hunderttausend mal wiederholen. Dieser Vorgang dauert allerdings 10min. Kann man das nicht irgendwie, durch eie bestimmte Programmiertechnik oder Anweisung beschleunigen? Kompliziert ist die Berechnung nicht und bei einem P500 müsste das doch auch eigendlich in einer größeren Geschwindugkeit möglch sein?

D.S.
 
  • DoLoop zu olangsam Beitrag #2
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Solange Du nicht darauf vertrauen kannst, daß der verwendete Compilter - bei Dir der VB-Compiler - guten und optimierten Programmcode erzeugt, bleibt als Alternative nur Selbermachen, und das heißt dann Programmieren der geschwindigkeitskritischen Sachen in Assembler.

Ich kann Dir in Assembler helfen, wie allerdings das Einbinden in VB funktioniert, da muß mir wiederum einer beistehen (Einbinden als Assembler-Block, Zugriff auf Variablen, etc.).

O Love

------------------
"I will not abide disobedience!"
 
  • DoLoop zu olangsam Beitrag #3
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Was ist es denn für eine Berechnung?

Cion
 
  • DoLoop zu olangsam Beitrag #4
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
@O Love:
Ich weiß das Angebot zu schätzen, aber mich mit Assembler auseinanderzusetzen habe ich im Moment keinen Nerv zu. Am VB-Compiler dürfte es eigendlich nicht liegen.

Zur Berechnung:
Durch die Do-Loop Schleife soll über die GetPixel-API Funktion überprüft werden ob bestimmte Farbwerte von Pixeln (insgesamt 16 Pixel) in festgelegten Abständen, an irgendeiner Stelle des Screens vorhanden sind. Dazu wird durch die Do-Loop Schleife jede Zeile nach diesem Muster "abgescannt".

Das Muster habe ich von einer PaidforSurf Viewbar erstellt, sodass über das Programm festgestellt werden kann, ob diese noch aktiv ist, um sie gegebenenfalls wiederherzustellen. Das funktioniert auch schon, aber nur wenn sich die Viewbar an der Stelle befindet an der die Farbwerte abgespeichert wurden. Wenn die Bar sich aber z.B. oben am Bildschirmrand befindet werden die falschen Koordinaten nach den Farbwerten überprüft. Deshalb habe ich einen "Algorythmus" geschrieben durch welchen dieses Koordinaten-Muster Zeile für Zeile über den Bildschirm geschoben wird (bildlich formuliert). Wenn dieses an einer beliebigen Stelle des Screens mit den Farbwerten der Koordinaten zutrifft, kann die Viewbar jeder Stelle lokalisiert werden (falls sie aktiv ist).

Es müssten dann glaube ich 1024*768 (meine Auflösung)*16 (die 16 zu überprüfenden Koordinaten mit Farbwerten) Werte berechnet werden.

D.S.

[Dieser Beitrag wurde von Deep Space am 15. August 2000 editiert.]
 
  • DoLoop zu olangsam Beitrag #5
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
.

[Dieser Beitrag wurde von Deep Space am 15. August 2000 editiert.]
 
  • DoLoop zu olangsam Beitrag #6
A

ACoSu1

Bekanntes Mitglied
Dabei seit
28.10.1999
Beiträge
191
Reaktionspunkte
0
Kannst du dir nicht einfach per Windows API die Position des Fensters holen ??? Oder hab ich da was falsch verstanden ??

ACoSu
 
  • DoLoop zu olangsam Beitrag #7
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
So ich würde ich es auch machen. Zunächst den Namen des Fenster mit getwindowclassname (glaub ich) ermitteln. Dann hast du mit FindWindow und dem Classnamen ein schönes Handle auf das Fenster. Somit kannst du dann auch über die Api alle wichtigen Eigenschaften (Position...) abfragen und anhand dieser Infos dann deine Kontrollen machen!

Ich weiß zwar nicht ganz genau was du kontrollierst, aber wenn du z.B. schauen willst ob eine grüne oder rote Lampe leuchtet, dann brauchst du auch nur z.B. einen Pixel zu überprüfen: rot = aus; grün = an

Hoffe das hilft dir irgendwie

Cion
 
  • DoLoop zu olangsam Beitrag #8
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Das funktioniert so leider nicht, da das Fenster (die Viewbar) keinen (ermittelbaren) Namen besitzt über den man es ansprechen könnte.
Des Weiteren möchte ich einzelne Objekte der Bar (wie z.B. den Login-Knopf) ansprechen, und das geht nur über diese Methode.

D.S.
 
  • DoLoop zu olangsam Beitrag #9
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Meiner Meinung nach kann unter Windows kein Fenster existieren, was keinen Class namen besitzt. Du kannst ja mal hiermit probieren ob du den Classnamen bekommst:

getcursorpos(p);
fensterhandle := windowfrompoint(p);
GetClassName(fensterhandle, name, 20);

Das ist zwar Delphicode, sollte aber kein Problem sein. So das packst du mal in einen Timer! Der erste Befehl speichert dir die Mauskoordinaten in den Point "p". Dann ermittelst du das Fensterhandle unter diesem Punkt. Mit GetClassname speicherst du nun den Classnamen in "name" ab. Diese Routine dient natürlich nur dem ermitteln des Classnamens. Kann sicher schon sein das du ihn ein wenig suchen mußt, soll heißen geh mal auch mit der Maus auf den Rand der ViewBar!

Irgendwann bekommst du dann mal einen gültigen Classnamen. Wenn du diesen hast (er wird sich nicht mehr ändern), dann kannst du später im richtigen Programm mit findwindow und dem classnamen sofort ein handle auf deine Viewbar bekommen.

Mit GetWindowRect kannst du dann die Maße des Fenster ausmachen und hast so die Position.

cion

[Dieser Beitrag wurde von cion am 15. August 2000 editiert.]
 
  • DoLoop zu olangsam Beitrag #10
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Dann ist das Problem eher der Algorithmus - mit I! :) - welcher in dieser Form zwar funktioniert, aber eben nicht optimal ist. Optimierungen, auch in Assembler, bringen nur marginale Verbesserungen.

Du solltest Dir zu diesem Thema mal entsprechende Literatur (Computergrafik) besorgen. Es gibt sicherlich Suchalgorithmen, wo Du bei Nichtfinden gleich um die volle Rasterbreite weiterspringen kannst.

O Love

PS: Gestern hat wohl der Server gesponnen, Dein Posting wurde nur in der Thread-Liste angezeigt.

------------------
"I will not abide disobedience!"
 
Thema:

DoLoop zu olangsam

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben