| |
|
|
Timotheus | P2CPP est un très nützliches Tool, dass qui geschriebenen Programme deutlich beschleunigt, justement chez komplexen et umfangreichen Berechnungen seulement im RAM. Im Durchschnitt ergibt sich ensuite chez einer solchen Anwendung une Beschleunigung um den facteur 10 ou bien plus. chez normalen Datenmengen ist XP dabei ausreichend, GDO arbeitet z.B. aussi avec XP11 et ist pour gewöhnlich bereits pour einigen Sekunden fertig. chez très grand Datenmengen nécessaire on mais une Portierung dans un autre Discours, comment z.B. Assembler ou bien P2CPP. un comparaison qui Geschwindigkeiten chez einem solchen Programme ergab z.B. cela folgende:
älterer ordinateur: XP11: 181s P2CPP: 3,5s
neuerer ordinateur: XP11: 52s P2CPP: 1,7s
qui Autor ist zwar pas plus erreichbar, pour diejenigen qui mais encore avant dem, zumindestens informatischen, mourir des Auteur une Vollversion conservé avons, ist cet Tool weiterhin très nützlich. Peut-être Sebastian König soudain verstorben, so comment Dietmar Horn, so dass il qui Software c'est pourquoi pas plus vertreiben peux. de qui Prospeed.dll J'ai eu z.B. aussi la fois une Vollversion käuflich bezogen, qui ist maintenant mais Freeware et pas verschollen.
comme Compiler eignet sich BCC55, welches es ici comme Freeware zum Télécharger gibt: [...]
qui Version 2.0b contient mais encore un paire faute. une Vue d'ensemble:
1. Mod
a% = b% Mod (c%*d%) wird trop nA = nB (_L(nC*nD) % _L());
Solution: P2CPP ou bien qui Compiler montrer une faute à. cet la ligne folgendermaßen simplifier:
$IFDEF P2CPP z% = (c%*d%) a% = b% Mod z% $ELSE a% = b% Mod (c%*d%) $ENDIF
2. Inc et $IFDEF
une de $IFDEF et $ENDIF eingeklammerte Inc wird fälschlicherweise trop chacun Zeit eingebunden.
Solution: Pour Incs chercher et indépendant de bedingter Compilierung faire
3. &MemDC
a% = &MemDC wird trop nA = ReadLong(g_hMemDC, );
Solution: Compiler zeigt den faute à. là den faute folgendermaßen reparieren:
MCLS 100,100 $IFDEF P2CPP 'P2CPP: <INLINE_CPP> nA = (long)g_hMemDC; 'P2CPP: </INLINE_CPP> $ELSE a% = &MemDC $ENDIF
4. & Loop
& Loop dans einer normalen Whileschleife erhält encore qui Werte de XP10, pas XP11. cela est hierfür
Whileloop 10 a% = 1 Tandis que a% = 1 imprimer & Loop a% = 0 Wend Wend
wird sous P2CPP et jusqu'à XP10 zehnmal "1" ausgegeben, sous XP11 "1" - "10". sous XP11 muss & Loop daher einer lokalen Variable zugewiesen volonté et cet ensuite dans qui zweiten Boucle verwendet volonté, pas & Loop selbst. GDO peux qui &Loop's trouver qui pas de einer Whileloopschleife entourer sommes: [...]
5. a% > b%/c%
si a% > b%/c% wird trop si (_D(nA>nB) / _D(nC))
P2CPP klammert ici anders comme XP, cela qui Division Vorrang gibt, daher doit qui Klammern zur Kompatibilitätswahrung chez (">" ou bien "<") et ("/" ou bien "\") manuel gesetzt volonté. GDO peux alle Zeilen trouver dans denen une solche Zusatzklammer notwendig son pourrait: [...]
6. a%*b%\c%
a% = b%*c%/d% 'vollständige Division e% = b%*c%\d% 'ganzzahlige Division wird trop nA = nB*_D(nC) / _D(nD); nE = nB*(int)(nC / nD);
XP berechnet d'abord qui Multiplikation ensuite qui Division, e%=(b%*c%)\d%, P2CPP pouvoir es oui c'est ca andersrum. c'est chez vollständiger Division unproblematisch (Kommutativgesetz), chez ganzzahliger Division sommes qui Ergebnisse mais unterschiedlich. cela betrifft Zeilen avec "*" et "\". GDO peux alle Zeilen trouver dans denen une Zusatzklammer notwendig son peux: [...]
qui faute volonté dans einer Textdatei au cours de eines Durchlaufs zur grafischen représentation abgespeichert, si dans qui config.ini "P2CPP" sur "1" gesetzt ist. |
|
|
| |
|
|
|
Sven Bader | là je wieder plus avec Profan2CPP trop 1faire habe dokumentiere je ici Dinge, sur qui je so stolpere. je benutze qui Version 2.0a
Den Anfang voudrais je avec dem Zeilenweise Einlesen de Fichiers faire
1.
cet Beispiel funktioniert bestens avec sous Windows erzeugten Fichiers, avec Fichiers aus Linux/Unix/Mac Umgebungen venez es trop Fehlern. Profan2CPP scheint ici zwingend un CR LF comme Zeilenumbruch trop erwarten alors \r\n et pas seulement \n ou bien seulement \r
qui effet fällt dans meinen Tests unterschiedlich aus. avec VC++ (1998) fehlt chacun la ligne cela erste marque, là ici wohl cela fehlende "\r" übersprungen wird. chez Borland C++ 5.5 wird gefühlt alles zerhackt et on landet trop allem Unglück beim Lecture dans einer Endlosschleife.
une (si aussi Maillet)-Solution ist cela korrigieren qui Zeilenumbrüche et Sauver comme KOPIE. mon Solution ist pas entier net, là vous \r allez \r\n austauscht et après doppelte \n dans simple umwandelt. cela peux zuvor vorhandene le vide Zeilen dans qui Dossier effacer.
'Dossier korrigieren
Faible Bereich#, FileSize(fichier$)
BlockRead(fichier$, Bereich#, 0, FileSize(fichier$))
content$ = String$(Bereich#,0)
content$ = translate$(content$,Chr$(10),Chr$(13)+Chr$(10))
content$ = translate$(content$,Chr$(13)+Chr$(13),Chr$(13))
dispose Bereich#
Faible Bereich#, len(content$) + 1
String Bereich#,0 = content$
Assign #1, fichier$+".tmp"
OpenRW #1
BlockWrite #1, Bereich#, 0, len(content$)-1
Fermer #1
dispose Bereich#
'Kopie Zeilenweise auslesen sans Probleme
Assign #1,fichier$+".tmp"
Reset #1
i& = 0
WhileNot Eof(#1)
Contribution #1,la ligne$
getLine(la ligne$)
Endwhile
Fermer #1
2. Angeblich falsche paramètre-Anzahl
ca wird beim Syntaxcheck chez manchen Aufrufen angezeigt. il peut den faute ignorer, là qui Programme am Ende quand même korrekt courir. toutefois nervt es, es chez chacun Compilierung bestätigen trop doit et par-dessus peut-être. echte faute trop verpassen.
qui Solution steckt ici dans qui Dossier subfuncs.dat bzw. funcdb.dat im \data\ Verzeichnis de Profan2CPP, ici peut qui Parameterzahlen korrigiert volonté comment zum Beispiel ogl.outlinefont 2 statt 1 et ogl.pyramid avec 3 statt 2.
|
|
|
| |
|
|
|
Sven Bader | Einen hab je encore
3. Vorzeichen
un Vorzeichenminus erzeugt dans Kombination avec einem Minus-Operator une faute beim Compilieren.
cls
declare i&,j&
i& = 5
j& = 10 - -i&'faute
j& = 10 + -i&'ok
j& = 10 - -1'faute
j& = 10 + -1'ok
j& = 10 + +1'faute
j& = 10 - +1'ok
imprimer j&
waitkey
end
alors j& = 10 - -i& allez pas, j& = 10 + -i& dagegen funktioniert. c'est dabei égal si cela Vorzeichen à einer numéro ou bien Variable steht. un doppeltes Plus (Operator + Vorzeichen) allez aussi pas, là peux on naturellement cela Vorzeichen simple omettre.
qui Solution? une Klammer à numéro avec dem Vorzeichen: j& = 10 - (-1) |
|
|
| |
|
|
|
Sven Bader | et avec ca zum Thema Abstürze , là je justement wieder so une le cas hatte...
cet treten gelegentlich (ensuite reproduzierbar) beim Übersetzen sur, alors si P2CPP "Übersetze..." anzeigt. qui Prozentzahl avant dem Absturz, gibt ici aussi une ungefähre concept de qui Stelle im Code.
Es venez ici wohl trop Zugriffsverletzungen, car beim Ausweichen sur vieille Systeme (Windows XP) fonctionne qui Übersetzung net par.
Folgende la ligne était beispielsweise pour une Absturz responsable.
factor! = 1.0 / Max(0.00001, sqrt(cross![0] * cross![0] + cross![1] * cross![1] + cross![2] *cross![2]))
chez mir hat déjà cela mathématique irrelvante Hinzufügen de Klammern geholfen, um den Absturz trop vermeiden:
factor! = 1.0 / Max(0.00001, sqrt((cross![0] * cross![0]) + (cross![1] * cross![1]) + (cross![2] *cross![2])))
Es scheint cependant une bestimmte la quantité "kritischer" Zeilen pour une Absturz nötig trop son, là je es dans einem kleinen Code pas reproduzieren konnte.
aussi dans qui Vergangenheit étions toujours Verkettungen vieler Operatoren qui ursache. qui Solution sommes toujours Klammern ou bien Teilrechnungen dans une variable zwischenspeichern. |
|
|
| |
|
|
|
Sven Bader | Addfiles avec Unterverzeichnissen alors führendem Stern, funktioniert pas avec absoluten Pfaden.
ici landen zwar Fichiers dans qui Listbox aus dem angegebenen Verzeichnis mais qui Pfad zur Dossier ist stattdessen cela aktuelle Arbeitsverzeichnis et avec cela faux! dans historyPath$ steckt un absoluter Pfad. Beheben peut es sich, indem on avant qui Ausführung de AddFiles dans cela betreffende Verzeichnis wechselt.
ChDir historyPath$
AddFiles *historyPath$+"\\"+DateiName(dname$) +"*"
ChDir CurrentDir$'vorheriges Verzeichnis muss vorab gespeichert volonté
Regex
XProfan 1 Beliebig viele Whitespaces, ensuite cat comme ganzes mot (cas-insensitive) 4 comme ganzes mot (cas-insensitive) 4 erster pas-Whitespace
Profan2CPP -1 abweichend 4 passt 1 abweichend
qui ici richtig liegt et pourquoi, es dans Profan einmal cela kleine et einmal cela grand ~S braucht, sais je pas, là je im Umgang avec Regex pas très erfahren suis. |
|
|
| |
|
|
|
Sven Bader | cela Thema Klammern hatten wir déjà un paire la fois mais oui c'est ca cela glaube je encore pas:
Um Bedingungen avec ou bien bzw et (|, &) sollte toujours une Klammer, sonst ca va dans P2CPP pas:
faux
richtig
|
|
|
| |
|
|