| |
|
|
- Seite 1 - |
|
E.T. | Eben so aufgefallen: Ist mein Xprofan-Programm im nProc am arbeiten, wird es z.B. durch "Neuzeichnen" aus dem Tritt gebracht. "Neuzeichnen" tritt ja immer auf, wenn das Prog-Fenster verkleinert, verdeckt oder verschoben wird (verdeckt z.B. durch Bildschirmschoner ). Nach solch einem Event scheind meine nProc endlos damit beschäftigt zu sein, das Fenster neu zeichnen zu wollen. Und dies ewig, mit der Eieruhr für völlige Auslastung. Auch die Messages an die Balken-Anzeigen erzielen keinerlei Wirkung mehr. Selbst das System-Menü wird wirr, vor dem nProc habe ich z.B. das [X] für "Programm schließen" deaktiviert, dieses ist dann wieder aktiv. Solange ich das Fenster nicht verdecke oder verschiebe, läuft das nProc klaglos durch, mit dem ganz normalen Pfeil als Mauszeiger....
Beispiel meiner nProc: KompilierenMarkierenSeparieren
nProc Vergleichen
global Liste1&, Liste2&, Liste4&, Zaehler1&, Zaehler2&, Status&, ProgressBar_3&, ProgressBar_4&
Declare Verg_Dat_1$, Verg_Dat_2$, Vergl_Str1$, Vergl_Str2$, Vergl_Pass&, Pos_L1&
WhileLoop 0,Zaehler1&
Vergl_Str1$ = GetText.Listview(Liste1&, &loop, 0)
Verg_Dat_1$ = GetText.Listview(Liste1&, &loop, 1)
WhileLoop 0,Zaehler2&
Vergl_Str2$ = GetText.Listview(Liste2&, &loop, 0)
If Vergl_Str1$ = Vergl_Str2$
Verg_Dat_2$ = GetText.Listview(Liste2&, &loop, 1)
IfNot Verg_Dat_1$ = Verg_Dat_2$
Inc Vergl_Pass&
AddString(Liste4&, Verg_Dat_1$ + "|" + Verg_Dat_2$)
EndIF
EndIf
Sendmessage(ProgressBar_4&,$0400+2,int(100.0/Float(Zaehler1&)*Float(&loop)),0)
EndWhile
Sendmessage(ProgressBar_4&,$0400+2,0,0)
Sendmessage(ProgressBar_3&,$0400+2,int(100.0/Float(Zaehler1&)*Float(&loop)),0)
EndWhile
EndProc
Ist ja halt kein so komplizierter Code, lediglich das vergleichen vieler Strings auf Übereinstimmung (läuft halt doch als nProc vieeel schneller als in XProfan..) |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 12.11.2010 ▲ |
|
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
- Seite 3 - |
|
| |
|
| |
|
|
|
|
| |
|
- Seite 2 - |
|
| E.T. (13.11.10)
iF (13.11.10)Was spricht denn dagegen das Du Deine Proc - die da halt "ewig" dauert - per CreateThread aufrufst statt "normal"? Weil in dem Prog eh keiner was machen kann (soll), solange das Vergleichen läuft.
So wie ich das verstanden habe stimmt dies aber nicht, denn es soll ja der UI-Thread neuzeichnen und nicht "nichts" tun. ^^
E.T. (13.11.10)
Würde denn dann das HWND den Neuzeichnen-Befehl mitbekommen, wärend es auf den anderen Thread wartet (soryy, ich stell mich wohl etwas blöd an...)
Denkst vlt. nur zu kompliziert. Du hast momentan halt 1 Thread und möchtest aber das dieser 2 Dinge "zugleich" tut - was "natürlich" nicht der Fall ist. ^^ |
|
|
| |
|
|
|
| Wart ich fummel Dir was... <-- ließt ja zum Glück keiner... |
|
|
| |
|
|
|
| |
|
| |
|
|
|
| Echten Thread "unendlich" lange ackern lassen ohne UI-Thread zu "blockieren": KompilierenMarkierenSeparieren So kannst doch einfach "Aufgaben"/ Threads anweisen und die werden lecker im Hintergrund abgearbeitet ohne das Du Dich kümmern müsstest... (nProcs sind doch threadsicher ^^) |
|
|
| |
|
|
|
E.T. | Super, das erstere sieht für mich so aus, als würde es machen, was ich suche.
Muss ich doch gleich die anderen Sachen ruhen lassen und einbauen und testen (und derweil wieder was über Call's und ProcAddr in Assembler lernen) ...
Auf jeden Fall schon mal ein großes DANKE für Deine Mühe!!! Und wenns klappt, dann ... |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 13.11.2010 ▲ |
|
|
|
|
| E.T. (13.11.10)
Super, das erstere sieht für mich so aus, als würde es machen, was ich suche.
Ihgitt bitte nimm abers 2.... das Erste ist ein übler Stinkschuh! ^^ |
|
|
| |
|
|
|
E.T. | SO, ich komm der Sache näher: Nur wird jetzt das Vergleichen aufgerufen und das XProfan-Prog rennt weiter, es soll aber "warten"(oder warten>nachschauen ob vergl. fertig>ggf. Fenster aktualisieren>warten), ob Vergleichen schon fertig. Würde ja denken mit Thread.Is(lThread) , aber steht ja bei XPSE "fehlerhaft"... |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 13.11.2010 ▲ |
|
|
|
|
| Schau mal hierzu nützliche APIs: [...]
Einfach mit GetExitCodeThread schauen ob der Thread noch läuft oder vor dem Ende der ThreadProc per SendMessage ne UserMessage absenden um den Hauptprogramm etwas "mitzuteilen" oder einfach per Return-Wert aus der Thread-Proc den ThreadExitCode festlegen oder per ExitThread ThreadExitCode an beliebiger Stelle in der ThreadProc festlegen: KompilierenMarkierenSeparieren |
|
|
| |
|
|
| |
|
- Seite 3 - |
|
|
E.T. | Hm, GetThreadID() wäre da wohl was, aber erst ab VISTA [...] . Muss aber unter XP laufen... |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 13.11.2010 ▲ |
|
|
|
|
| |
|
| |
|
|
|
E.T. | Jo, so passt's... , danke IF |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 14.11.2010 ▲ |
|
|
|
|
| |
|
| |
|
|