Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Programmteil abbrechen, aber wie?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.05.2004, 13:42 Uhr
~WantToKnow
Gast


Hallo, ich habe folgendes Problem:
Ich habe einen Button:

C++:
void CAboutDlg::OnFciRamtest()
{
//innerhalb dieser Funktion wird eine weitere Funktion aufgerufen, die aber in
//einer anderen Datei steht
     int rc;
     rc = FCI_RAMtest(check+1, 0, 0);
}



Die Fkt. FCI_RAMtest ist wie folgt definiert, wie schon erwähnt,in einer anderen Datei:

C++:
FCI_RAMtest(INT16 mod_nr, char *FCI_addr, UINT32 anz)
{
..... int diagnose
....
diagnose = RAM_test((UINT32 *) val, anz, fp)
}
  


Die Fkt. RAM_test ist aber wieder wo anders definiert, jedoch in der gleich Datei wie FCI_RAMtest

C++:
int RAM_test(UINT32 *adr, UINT32 rng, FILE *fp)
{
    for(i=0; i<rng; i++)
    {
             //....hier wird ein riiiiiiiiesiger Block abgearbeitet, sehr zeitintensiv...
             }
}



Meine FRAGE nun:
ich möchte gerne die Abarbeitung des riiiiiiiiiiiiiiiiesigen Blocks abbrechen können, dafür hab ich mir einen Abbruch-Button auf die GUI gesetzt, der wie folgt definiert ist:


C++:
void CAboutDlg::OnFciRamtestAbbr()
{
}



....aber WIE geht es jetzt weiter?
Hab da an eine globale Var gedacht....die halt in dem riesigen Teil auf einen bestimmten Wert gesetzt wird, wenn man den OnFciRamtestAbbr-Button drückt...
Was meint ihr?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2004, 13:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du kannst in deine schleife z.b. noch nen flag packen und bei jedem durchlauf der schleife testen obs noch gültig ist...


C++:
for(i=0; i<rng && !abbruchflag; i++){....



in deiner abbruchbuttonmehtode setzt du dann das flag einfach auf 1...

noch ne anmerkung... wenn du deinen ramtest startet musst du den in nem thread laufen lassen wenn du dann noch in deinem programm während der berechnung interagieren willst.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2004, 13:58 Uhr
~WantToKnow
Gast


Danke, aber was in ein Thread? Bin ein absoluter Anfänger in Sachen Visual C++....
Aber dass man in der for-Anweisung noch eine Bedingung packen kann, das wusste ich nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2004, 14:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ums kurz zu sagen kann man damit programmabläufe parallelisieren

wenn du ein langes blabla willst kannst ja mal hier klicken
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.05.2004 um 14:04 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.05.2004, 14:17 Uhr
RHBaum



gibt eigentlich 3 loesungsansaetze .... wobei einer richtig boese ausarten kann :p

1. du machst es wie windalf vorgeschlagen ... mit ner Abbruchvariable .
deine variable musst als referenz eubergeben, damit die auslesen kannst ....
und du musst in deiner funktion die abarbeitung der Nachrichtenschleife fuer dein Window, was im selben thread laeuft, anstossen. Dazu muss in deiner ramtestfunktion ne windowsspezifische funktion zur abgabe der des threads einfuegen .... hat den nachteil, das deine function ramtest von windows abhaengig wird ....

2. du splittest deine funktion in portionen zu wenigen sekunden auf, und steuerst die komplett ueber variablen ... so nach der art nen inter Variable ist 10 ... dann test ich jetzt speicherbereich 11 - 20 ... und setze die var auf 20! naechstes mal dann von 21 - 30 .... etc ... das loslaufen und stoppen machst auch uever variablen ... und pappst die ganze sache in die klassische OnIdle funktion deines fensters .... Nachteil : du musst deine funktion aufsplitten und musst variablen controllieren, deine Parameter werden auch mehr .....

das bisher war pseudo-Multitasking !
3. mach richtiges Multihtreading. Nen abbruchmechanismuss solltest trotzdem einbauen, damit sich der thread ordnungsgemaes auf anfrage beenden kann ... etc ... und musst deine anwendung threadsicher machen und eigene threads aufziehen ... das ist die variante, die ausarten kann .... dafuer ists elegant, modern :-) und effektiver ...

Ciao ...

Dieser Post wurde am 06.05.2004 um 14:24 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: