Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Sprawdzanie bezczynności
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
Sprawdzanie bezczynności

Witam

Mam ListView, w której znajduje sie lista plików i katalogów w aktualnym katalogu (to ustalam sam)

Lista ta jest odświeżana co jakis czas za pomocą Timera

Chciałem zrobić coś takiego, ze gdy nasz w naszym programie nie jest wykonywana żadna procedura, funkcja (cokolwiek), nawet nie przesuwamy Scroll'ów

to wykonywane są funkcje w Timerze.

Chodzi ogólnie o to żeby funkcje w Timerze nie blokowały mi programu na czas ich wykonywania.

Nie chciałbym używać Intervala = 0 bo musiałbym to wklepać do każdej funkcji (no prawie każdej )

Jak to zrobić? - Moze API

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

14-10-2004 21:32
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

W każdej chronionej procedurze wpisać
bDoTimerEvents = False
na początku i to samo = True na końcu.
W procedurze Timera:
If Not(bDoTimerEvents) Then Exit Sub

API na 99.99% tego się nie da zrobić, już wyjaśniam dlaczego. Otóż VB tworzy złudzenie, ze żadna procedura nie działa. To nie jest prawda. ZAWSZE działa jakaś procedura (choćby główna pętla), tyle, że programista VB tego nie widzi, bo kompilator robi wszystko za niego. Z tego powodu nie da się przy pomocy API tego wykryć - bo w rzeczywistości nie istnieje pojęcie niewykonywania w danym momencie żadnego kodu.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

15-10-2004 05:40
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
bogdan




Typ: neutral
Postów: 46
Zarejestrowany: Nov 2003

Chciałbym się podłączyć do posta DJK bo ten temat też mnie interesuje. Myślę, że problem ten udałoby się rozwiązać następująco : system monitoruje aktywność użytkownika (chociażby do uruchomienia wygaszacza lub wyłączenia monitora, dysków, uruchamiania zadań,itp.). I teraz pytanie : czy jest jakaś możliwość sprawdzić jak długi jest już czas bezczynności wg systemu ?


_____________________________________________
Bogdan

15-10-2004 11:11
Pokaż profil bogdan  Wyślij email do bogdan   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Sprawdzić bezczynność użytkownika w danym programie nie jest trudno. MOżna np. sprawdzić, czy od jakiegoś czasu nie poruszał on myszką po oknie.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

15-10-2004 13:42
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

No ztą myszką to trochę przesada Nie o aż takiej bezczynności mówię

A ten przykłąd z tą zmienną to nie zbyt jest bo do każdej funkcji musiałbym to władować także odpada

Pozdrawiam

[Post edytowany dnia 15-10-2004 20:31 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

15-10-2004 20:25
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Nie do każdej, tylko do tych, które nie powinny być przerywane. Poza tym jeśli użytkownik nic nie robi, to zwykle żadna procedura (w VB) nie jest wykonywana. I pomysł z blokowaniem na początku każdej procedury wydaje mi sie sensownym rozwiazaniem. owszem - jest trochę roboty. Ale programowanie ma to do siebie, że wymaga roboty, to nie jest tak, że zawsze istnieje genialny prosty sposób. Czasami trzeba iść wprost.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

15-10-2004 20:54
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Nie rozumiem czegoś - wcześniej pisałeś że zawsze wykonywana jest jakaś procedura, teraz piszesz, ze cytuję:

"jeśli użytkownik nic nie robi, to zwykle żadna procedura (w VB) nie jest wykonywana"

W końcu jak to jest.

Jeżeli chodzi o wielowątkowość to mimo iz VB tego nie umozliwia to myślę że musi sie to dać jakoś zrealizowac (chyba, ze naprawdę jestem w błedzie)

A co do tego programowania to jest to jasne że bez pracy nie ma kołaczy ale jeśli można coś zrealizować w sposób optymalny to czemu nie.

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

15-10-2004 21:55
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Każdy program zawsze coś robi (chyba, że go system w jakiś sposób zatrzyma, ale wtedy jest martwy, wieć nie ma z tego żadnego pożytku). Natomiast tutaj celowo napisałem "(w VB)" - chodziło mi o te procedury, które piszesz w VB. One czasami sa wykonywane, czasami nie. Jeśli użytkonik nie podejmuje żadnych akcji i program sam z siebie nie wywoła żadnej z nich - te procedury (te, które stworzył programista) nie są wykonywane.

Wykrywanie: dobrze, rozwinę temat i powiem tak: Są dwie odpowiedzi:
Nie znam innego sposobu: nie ma w VB funkcji pozwalajacej sprawdzić, która procedura jest wykonywana, która była przed chwilą itd. Zatem jedynym sposobem pozostaje stworzenie własnego systemu informowania - np. takiego, jak wskazany.
Ale jest i odpowiedź druga:
Istnieje możliwość sprawdzenia: każda procedura wywołana w czasie działania innej spowoduje wrzucenie adresu poprzedniej na stos. Jeśli udałoby ci się dobrać do stosu i odczytać z niego dane, to może na ich podstawie byś to ustalił. Ale rozwiazanie jest hipotetyczne i nie wiem nawet gdzie dokładnie jest stos w programie VB - co wiecej - nie wiem, czy on wogóle jest w samej aplikacji, czy np. tylo w VBVM.

Wielowątkowości: podobno w VB.NET i VB 2k3 jest, ale w VB6 nie ma. Wszystkie programy pisane w tym jezyku sa jednowątkowe. Oczywiscie w czystym VB, bo istnieją metody dodawania wątków, ale to już wiąże się ze stworzeniem programu w kodzie maszynowym (nie mylić z Assemblerem) lub użyciem WinAPI - ale która funkcja mogłaby to zrobić - nie wiem. Jedyna znana mi procedura niestety nie działa prawidłowo w VB.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

15-10-2004 22:54
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Aha, możesz użyć jeszcze innej wersji jeśli jesteś leniwy . Mianowicie utwórz jedną procedurę zbiorczą, która będzie ustawiała jakąś zmienną na True/False przy wejściu/wyjściu, a sama procedura na podstawie parametrów wywoła pozostałe.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

15-10-2004 22:55
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Mogłbyś jakoś to rozwinąć bo mam wrażenie że niczym to się nie różni od poprzedniej propozycji ze zmienną.

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

16-10-2004 10:15
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Różni się tylko tym, ze nie musisz wpisywać kodu do każdej z procedur.

Np. robisz coś takiego:
Sub ProcHost(sObj As String, sProc As String)
    bDoTimerEvents = False
    CallByName sObj, sProc, vbMethod
    bDoTimerEvents = True
End Sub



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

16-10-2004 12:33
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 10 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1