Aktualizacja kilku progressBar-ów

dział ogólny

Aktualizacja kilku progressBar-ów

Nowy postprzez Slynx » piątek, 16 września 2011, 01:39

No.. więc tak. Zacznę od kodu :D

KOD cpp:     UKRYJ  
Void Resume(int xxx)
{
       hash->download->updateCallback = gcnew Download::UpdateProgressCallback(this, &ExtLVDownload::_ProgressUpdate);
};


To jest pierwsza wersja funkcji, dopiero staram się to wszystko poskładać w całość (oczywiście wyciąłem to co niepotrzebne).
hash - jest pewnym obiektem - reprezentuje konkretne pobieranie pliku (temat dotyczy aktualizacji progressBar-ów przy pobieraniu wielu plików)
download - jest obiektem klasy, który realizuje samo pobieranie dla danego obiektu (hash);
updateCallback - jest delegatą, która umożliwia aktualizację informacji (szybkość pobierania, pobrane dane, itp).

Jakby to teraz wytłumaczyć...
Obiekt ExtLVDownload jest odpowiednikiem ListView, na nim wyświetlane są wszystkie informacje (czyli progressbary) - załóżmy, że jedno pobieranie na jeden wiersz. Przyjmijmy, że pobieranych jest 5 plików. Dla każdego jest unikatowy obiekt hash, a tworzenie delegaty jest równoznaczne z rozpoczęciem pobierania.
Problem leży w tym, że instancja obiektu ExtLVDownload jest tylko jedna (co jest oczywiste), a do niej jest przypisanych (w tym wypadku) 5 delegat. Już chyba można się domyślić w czym problem.
Jak teraz odróżnić, która z aktualnie wywoływanych delegat powinna aktualizować dane dla którego wiersza.
No i tu nie wiem co zrobić, bo taka aktualizacja nie wysyła żadnych informacji na temat wysyłającego, więc ciężko ustalić który wiersz aktualizować.
Wiem, że można by dodać jeszcze jeden parametr do delegaty, który byłby np. unikatowym identyfikatorem klasy obiektu download, wcześniej tworząc sobie słownik <identyfikator, numer wiersza.


Może to głupie pytanie, ale chcę wiedzieć, czy tak to się robi ? Mam wrażenie, że kombinuje pod górkę. A konkretnych przykładów w internecie już ciężko znaleźć, to raczej dość precyzyjny i rzadki problem. Na razie to zostawiam, bo nie chcę niepotrzebnie mieszać w kodzie.

P.S. Jeśli coś jest niezrozumiałe, to mogę sprostować. Dla mnie kod jest oczywisty, bo cały czas przy nim siedzę, ale nie każdy może to tak łatwo zrozumieć.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Aktualizacja kilku progressBar-ów

Nowy postprzez polymorphism » piątek, 16 września 2011, 09:53

Kwestia formalna.
download - jest obiektem klasy, który realizuje samo pobieranie dla danego obiektu (hash)
(...)
Obiekt ExtLVDownload jest odpowiednikiem ListView
(...)
Problem leży w tym, że instancja obiektu ExtLVDownload

Obiekt i instancja w tym kontekście oznaczają to samo. ExtLVDownload nie jest obiektem, tylko klasą. I problem nie leży w "instancji obiektu", tylko instancji/obiekcie klasy ExtLVDownload. Zwracaj uwagę na pojęcia, bo są one istotne do tego, żeby zrozumieć, o co Ci chodzi.

Wiem, że można by dodać jeszcze jeden parametr do delegaty, który byłby np. unikatowym identyfikatorem klasy obiektu download, wcześniej tworząc sobie słownik <identyfikator, numer wiersza.

Dodatkowy parametr to najsensowniejsze rozwiązanie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Aktualizacja kilku progressBar-ów

Nowy postprzez Slynx » piątek, 16 września 2011, 11:15

Obiekt i instancja w tym kontekście oznaczają to samo. ExtLVDownload nie jest obiektem, tylko klasą. I problem nie leży w "instancji obiektu", tylko instancji/obiekcie klasy ExtLVDownload. Zwracaj uwagę na pojęcia, bo są one istotne do tego, żeby zrozumieć, o co Ci chodzi.

Zgubiłem słówko. To mi się zdarza. Myślę szybciej niż piszę, dlatego czasami pomijam słówko, bo mam wrażenie, że już je napisałem ;)
Powinienem był jeszcze raz przeczytać całość zanim kliknąłem wyślij, ale wcześnie już nie było ; )

No dobra, to zmodyfikujemy delegatę. Zobaczymy czy nie będzie problemów...
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 12 gości

cron