barti82 Napisano Sierpień 31, 2006 Zgłoś Share Napisano Sierpień 31, 2006 Jestem w trakcie pisania programu, ktorego celem jest symulacja, mniej istotne czego, bo chodzi o to, ze chcialbym wstawic na plansze przycisk, po ktorego nacisnieciu symulacja wstrzymywalaby sie, moznaby w miedzy czasie odczytac i spisac z niej wyniki, a potem po nacisnieciu innego przycisku by znow wznawiala sie od stanu, w ktorym zostala zatrzymana, tylko nie wiem jak to zrobic Ma ktos jakies pomysly? Moze sa juz gotowe funkcje w Builderze? Za wszelka pomoc z gory dziekuje! Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Sierpień 31, 2006 Zgłoś Share Napisano Sierpień 31, 2006 Może po prostu po naciśnięciu na wstrzymanie zapisujesz aktualne parametry tego czegoś a po w znowieniu zaczynasz od nich. Albo po prostu masz jakaś pętle w której wykonywane są obliczenia tego czegoś co symulujesz i wsadzasz jedną zmienną BOOL i jak true to robisz obliczenia jak false to wszystko stoi. W czym problem ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Sierpień 31, 2006 Zgłoś Share Napisano Sierpień 31, 2006 robisz tak:w petli symulujace cos np:Pascal fSimulBreak = false;for(int t=0;t<100000000;t++){cos tam./.............Application->ProcessMessages();if (fSimulBreak == true) {break;}} //w kodzie gozika ktory ma przerywac powinno byc cos takiego....fSimulBreak = true;.... Zmienna fSimulBreak powinna byc zmienna globalna (lub zmienna dla kolasy prowadzacej symulacje). Nie wiem czy w BorlandC jest procedura Application->ProcessMessages(); napisalem to na podstawie Delphi ale zakladam ze jest jakis podobny mechanizm ktory ci to umozliwi. Ogolna zasada jest taka:1. Zerujesz zmienna mowiaca czy przerwac symulacje2. wchodzisz do perli symulacji3. W kazdym kroku sprawdzasz czy odpowiednia zmienna jest false/true jesli jest true to wyskakujesz z petli symulacji4. wykonujesz kod ktory pozwala na przetworzenie komunikatow systemu (ProcessMessages)5. W odpowiedniej procedurze obslugujacej klikniecie klawisza ustawiasz zmienna odpowiedzialna za przerwanie symulacji na true.Inne podejscie (ale wydaje mi sie ze bedzie dla ciebie duzo trudniejsze) to zrobic proces symulacji na osobnym watku. Jesli bys chcial przerwac symulacje kilujesz wtedy watek. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
barti82 Napisano Wrzesień 1, 2006 Autor Zgłoś Share Napisano Wrzesień 1, 2006 No dobrze, rzeczywiscie dziala tak jak chcialem, tylko mam pytanie jak teraz zrobic zeby znow ta symulacje wznowic od stanu w ktorym zostala zatrzymana? Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Wrzesień 1, 2006 Zgłoś Share Napisano Wrzesień 1, 2006 heh :)ale zes wymyslil :)najlepiej to na watkach bo mozesz sobie suspenda zrobic. albo robisz takie cos ze jak breakujesz symulacje to robisz jej dumpa do np pliku albo gdzies do pamieci. Gdy uzytkownik da continue to inicjujesz co tam potrzeba na podstawie tego dumpa i wskakujesz do petli symulacji. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Wrzesień 1, 2006 Zgłoś Share Napisano Wrzesień 1, 2006 Programuję w Delphi, ale BCB6 ma pewnie podobne funkcji, tylko składnia się różni. Jednakże spróbuje dostosować się do C++.Zrobiłbym tak samo jak Toster ale zamiastPascal if (fSimulBreak == true) {break;} } dałbymPascal while (fSimulBreak == true) { Application->ProcessMessages(); } I jak ktoś naciśnie guzik "Ponów" to trzeba fSimualBrak dać false. Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
barti82 Napisano Wrzesień 2, 2006 Autor Zgłoś Share Napisano Wrzesień 2, 2006 Bardzo dobry pomysl, bardzo Ci dziekuje to znacznie ulatwi dalsza moja prace Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Wrzesień 2, 2006 Zgłoś Share Napisano Wrzesień 2, 2006 nie taki dobry.bo jak ktos kliknie symuluj pozniej wstrzymaj a pozniej znowu symulyuj to dostaniesz nieprzewidziane zachowanie. chyba ze na poczatku procki symuluj sprawdzisz jeszcze jaks flage ktora mowi o tym czy symulacja byla wczesniej rozpoczeta i trzeba ja wznowic czy rozpoczac od nowa. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Wrzesień 2, 2006 Zgłoś Share Napisano Wrzesień 2, 2006 Wg mnie to i tak mniej czasu i mniej skomplikowane jest dodanie zmiennej określającej stan symulacji niż pisanie wątków. Przy wątkach też by trzeba byłoby sprawdzać czy wątek już został stworzony i należy go wznowić, czy też go stworzyć. Najlepiej aby był jeden guzik, któremu zmienia się Caption, a Tag by określał stan. Wątki mi słabo wychodzą, co nie oznacza, że są złe Raczej to ja jestem gorszy, choć jeszcze nigdy nie potrzebowałem pisać wątków Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
barti82 Napisano Wrzesień 3, 2006 Autor Zgłoś Share Napisano Wrzesień 3, 2006 Przycisk uruchamiajacy symulacje dziala tylko raz po jego nacisnieciu sie deaktywuje, wiec tu problemu nie ma Bo albo ktos po wstrzymaniu bedzie musial wznowic symulacje osobnym przyciskiem albo ja zakonczyc calkowicie innym Ja tez jeszcze nigdy watkami sie nie bawilem, wiec ten pomysl nie dosc ze nie jest skomplikowany to przede wszystkim skuteczny, dlatego go zastosowalem i efekt podoba mi sie Ale dziekuje Wam wszystkim za pomoc Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.