Skocz do zawartości

Doc

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Doc

  1. Pawiem ci tak:
    Wielowątkowość to sciema. W rezultacie każdy wątek, proces itp są uruchomione w pewnym czasie i to się odbywa na zasadzie przełączania procesów i wątków. Każdy otrzymuje określoną ilość czasu na wykonanie zależną od priorytetu ( mniej więcej ). Ale motyw jest taki że na przełączanie tych wątków też się zużywa pewną ilość mocy procesora.
    Generalnie zasada jest taka:
    Jeżeli nie potrzebny ci jakiś wątek to go nie rób bo spowolnisz tylko system.
    A co do materiałów to w każdej książce o programowaniu w WINAPI coś powinno być. Ja troche czytałem o tym w "MFC - czarna księga" czy coś takiego. Ale nie warto jej kupywać dla samego tego tematu :P

  2. Zgadzam sie ale nie można zrobić funkcji składowej żeby możliwe było działanie nie takie

    CVector v;
    //
    // tu inne rzeczy
    //
    CVector v1 = v*12.0f;
    

    ale takie

    CVector v;
    //
    //tu inne rzeczy
    //
    CVector v1 = 12.0f*v; // tu błąd wywali
    

    bo funkcja składowa przyjmuje parametry poprzez this i zmienną float.
    Wtedy trzeba zaprzyjaźniać. A jak sie napisze friend w ciele klasy to to nie będzie funkcja składowa tylko normalna jeżeli sie nie myle( ale moge sie mylic).
    Taki jest moje skromne zdanie.

  3. Dzieki za odpowiedz. Macie racje trzeba albo jeden argument albo zaprzyjaźnic albo globalną.

    A zaprzyjaźnianie nie jest bez sensu bo funkcja globalna nie ma dostepu do pul niepublicznych klasy.

  4. Problem jest z podstaw programowania ale jest. Chciałem napisac klase CVector następującej treści:

    class CVector {
       float x;
       float y;
       float z;
    
       CVector operator*( float r )
       {
           x*=r;
           y*=r;
           z*=r;
           return (*this);
        }
    
       CVector operator*( float r, CVector& a ) // tu wywala bland
       {
           return (a*r);
       }
    
    };
    

    oczywiście to nie cala klasa. Chodzi o to że przy zaznaczonym fragmencie wywala mi VC6 bland deklaracji, a mianowicie że ten operator musi zostać zadeklarowany jednoargumentowo. Patrzyłem w książkach i nawet w bibliotekach samego VC6 i jest to tam zadeklarowane podobnie tylko że operator '+' ( u mnie tez nie dziala ), i te operatory deklarowane w innych bibliotekach dzialaja. Może coś żle robie ( a jak znam siebie to pewnie tak ). Może ktoś wie co jest nie tak???
    Za uwagi z góry thenx.

    P.S: Sprawdzalem w forum nie ma takiego tematu :/

  5. Sorry zżeniłem tutaj, nie mialem dostepu do swojego zródła i dlatego.
    Tak na prawde to jest taki motyw jak następuje:

            double liczba = 0.412;
            double calosci,ulamki;
            cout << "wartosc poczatkowa liczba=" << liczba << endl;
            cout << endl;     
    
            do
            {
                    liczba *= 10.0;
                    
                    ulamki = modf( liczba, &calosci );
            
                    
    
    
                    cout << "liczba=" << liczba << endl;
                    cout << "calosci=" << calosci << endl;
                    cout << "ulamki=" << ulamki << endl;
                    cout << endl;                     
                    
                    liczba -=  calosci;
    
            }while( liczba > 0.0 );
    

    i po wywolaniu tego daje to dziwne wyniki takie jak:
    ( jak ktos mi powie co jest grane to bede wdzieczny)

    wartosc poczatkowa liczba=0.412

    liczba=4.12
    calosci=4
    ulamki=0.12

    liczba=1.2
    calosci=1
    ulamki=0.2

    liczba=2
    calosci=2
    ulamki=1.06581e-014

    liczba=1.06581e-013
    calosci=0
    ulamki=1.06581e-013

    liczba=1.06581e-012
    calosci=0
    ulamki=1.06581e-012

    liczba=1.06581e-011
    calosci=0
    ulamki=1.06581e-011

    liczba=1.06581e-010
    calosci=0
    ulamki=1.06581e-010

    liczba=1.06581e-009
    calosci=0
    ulamki=1.06581e-009

    liczba=1.06581e-008
    calosci=0
    ulamki=1.06581e-008

    liczba=1.06581e-007
    calosci=0
    ulamki=1.06581e-007

    liczba=1.06581e-006
    calosci=0
    ulamki=1.06581e-006

    liczba=1.06581e-005
    calosci=0
    ulamki=1.06581e-005

    liczba=0.000106581
    calosci=0
    ulamki=0.000106581

    liczba=0.00106581
    calosci=0
    ulamki=0.00106581

    liczba=0.0106581
    calosci=0
    ulamki=0.0106581

    liczba=0.106581
    calosci=0
    ulamki=0.106581

    liczba=1.06581
    calosci=1
    ulamki=0.0658141

    liczba=0.658141
    calosci=0
    ulamki=0.658141

    liczba=6.58141
    calosci=6
    ulamki=0.58141

    liczba=5.8141
    calosci=5
    ulamki=0.814104

    liczba=8.14104
    calosci=8
    ulamki=0.141036

    liczba=1.41036
    calosci=1
    ulamki=0.410364

    liczba=4.10364
    calosci=4
    ulamki=0.10364

    liczba=1.0364
    calosci=1
    ulamki=0.0364015

    liczba=0.364015
    calosci=0
    ulamki=0.364015

    liczba=3.64015
    calosci=3
    ulamki=0.64015

    liczba=6.4015
    calosci=6
    ulamki=0.401503

    liczba=4.01503
    calosci=4
    ulamki=0.0150279

    liczba=0.150279
    calosci=0
    ulamki=0.150279

    liczba=1.50279
    calosci=1
    ulamki=0.502788

    liczba=5.02788
    calosci=5
    ulamki=0.0278807

    liczba=0.278807
    calosci=0
    ulamki=0.278807

    liczba=2.78807
    calosci=2
    ulamki=0.788067

    liczba=7.88067
    calosci=7
    ulamki=0.880669

    liczba=8.80669
    calosci=8
    ulamki=0.806686

    liczba=8.06686
    calosci=8
    ulamki=0.066864

    liczba=0.66864
    calosci=0
    ulamki=0.66864

    liczba=6.6864
    calosci=6
    ulamki=0.686401

    liczba=6.86401
    calosci=6
    ulamki=0.864014

    liczba=8.64014
    calosci=8
    ulamki=0.640137

    liczba=6.40137
    calosci=6
    ulamki=0.401367

    liczba=4.01367
    calosci=4
    ulamki=0.0136719

    liczba=0.136719
    calosci=0
    ulamki=0.136719

    liczba=1.36719
    calosci=1
    ulamki=0.367188

    liczba=3.67188
    calosci=3
    ulamki=0.671875

    liczba=6.71875
    calosci=6
    ulamki=0.71875

    liczba=7.1875
    calosci=7
    ulamki=0.1875

    liczba=1.875
    calosci=1
    ulamki=0.875

    liczba=8.75
    calosci=8
    ulamki=0.75

    liczba=7.5
    calosci=7
    ulamki=0.5

    liczba=5
    calosci=5
    ulamki=0
    -- koniec--

    link do projektu www.lo1.elk.edu.pl/projekt/asd.zip
    oraz do gotowego programu www.lo1.elk.edu.pl/projekt/asd.exe

  6. Hmmm.... nie wiem czy warto odpowiadać bo...
    No właśnie ... Są sporo sposobów:
    1. możesz po prostu zastosować jakąś funkje usypiania programu na 10 mili sekund ( delay, sleep )
    2. ustawić timera na 10 mili sekund ( ale to nie zawsze bedzie co 10 mili sekund )
    3. zrobić sobie oddzielny wątek ( najlepiej jak na najwyższym priorytecie )

    Jest jeszcze duuuuzo sposobów. To jest tylko kilka podstawowych.
    Mam nadzieje ze to o to chodzilo.

  7. Jest taki problem który mnie bardzo zadziwił. Pisałem program w którym był taki oto kod:

    double x = 4.0;
    double czesc_calkowita;
    double czesc_ulamkowa;
    czesc_calkowita = modf( x, &czesc_ulamkowa );
    

    i wszystko byloby dobrze gdyby po wykonaniu tej funkcji w
    czesc_calkowita byla liczba 4.0 a w czesc_ulamkowej bylo 0.0
    ale jest w odpowiednio 3.0 i 0.9999999999....
    CZy ktoś może mi wyjaśnić czemu??? (na VC6.0)

  8. Ta wartość zależy od wysłanego komunikatu.
    Nie wiem co ty robisz z tym wskaźnikiem ale mam nadzieję że on pokazuje na jakieś miejsce w twoim programie a nie gdzieś indziej :)

    Hmm.... wlasnie ze ten wskaznik jest z tskmsg a nie z mojego programu. I w ten sposob jest lipa bo nie wiem jak go uzyskać.

  9. A juz chcialbys wiedziec 8) Ja chce wiedziec to o co sie spytalem. Jak sie dowiem to zapodam zrodlo i sie z niego dowiesz. A jak cos to on nie zalezy od komunikatu, to jest zwykly wskaznik i ja chce ustawic pamiec na ktorom wskazuje na 1.
    Litosci!!! Czy nikt na prawde nie wie :/ :?

  10. Po paru godzinach debugowania doszedlem do tego ze:
    po pierwsze szuka okna
    po drugie wysyla komunikat

    nie bede teraz pisal jak co i gdzie bo to nie ma sensu. Musze tylko wiedziec jak ustawic ten ostatni parametr na jeden albo ewentualnie skad go wziasc bo nigdzie nie moge znalesc opisu dokladnego funkcji SendMessageTimout.

    Czy teraz jasne????

  11. Jest jeszcze inny sposob. Mozna zrobic se mutexa. Gdy kopia bedzie chciala uruchomic to po prubie zrobienia muteksa sprawdzic GetLastError() czy jest ruwny ERROR_ALREADY_EXIST jezeli tak to znaczy ze program jest juz uruchomiony. Na koncy programu zwalniamy se mutex i wszystko gra. Jeszcze mozna semaforow uzyc ale nie pamietam tera jak to sie robi. Jak interesuje cie to napisz na meila.

  12. Hmmmm..... spoon mi nie o trojana chodzi tylko o to by zablokowac mozliwosc uruchamiania task menedzera.
    O co mi chodzi to napisalem na samym poczatku ale moge jeszcze raz :) tylko troche jasniej. A wiec:

    W pewnym momencie taskmgr znajduje okno o tytule "Menedżer zadań Windows" czy coś takiego. A nastepnie wysyła za pomocą funkcji SendMessageTimeout komunikat. Chodzi mi o ostatni parametr czyli pdwResult ktory jak dobrze zrozumialem zawiera kod zwracany przez funkje obslugi okna do ktorego zostala wyslana wiadomosc, ale to jakas lipa bo obojetnie co zwroce to *pdwResult == 0 a jak to zwraca taskmgr to jest 1 i moje pytanie jest takie:
    Jak ustawic tom zmienom na 1???

    Juz jasniej sie chyba nie da tego napisac :)

    Bylbym baaaaaaaaaardzo wdzieczny za pomoc.

  13. Dobra dobra spoon ale jak wiesz malo prawdopodobne jest ukrycie programu z listy procesów. Lepiej powiedz jak dziala funkcja SendMessageTimeout w msdn nie wiele bylo. Lepiej zablokowa task menedzera niz nic nie muc zrobic no nie???? :)
    Oczywiscie mozna zamknac okno taskmgr ale kto by sie w to bawil jak kazdy to moze zrobic ale zrobic zeby sie nie uruchamial to jest cos :) no nie????

  14. Witam!
    Mam pare pytań i uwag.
    Na wstępie chciałbym się zapytać skąd (jeśli wogóle gdzieś jest ) można sciagnac dokumentacja WinApi, poniewaz posiadam nienajbardziej orginalnego VC++ i niestety plytek z helpem nie mam.

    Jeszcze co mnie trapi to takie jedno pytanko, a raczej problem:
    jest taki program ktory nazywa sie taskmgr.exe ( Menedzer zadan :) )
    wiec wpadlem na pomysl jak go zablokowac w XP a mianowicie:
    Jezeli jest uruchomiony to mozna tak po prostu po chamsku znalesc jego okno i przez funkcje FindWindow i wyslac WM_CLOSE ( funkcja DestoyWindow zamiast WM_CLOSE tez dziala ). I tu wszystko jasne piekne. Ale zaczyna sie gorka. Teraz trzeba utworzyc okno o nazwie "Menedżer zadań Windows" poniewaz menedzer zadan wykrywa swoja obecnosc poprzez znalezienie okna o tym tytule. Okno moze byc ukryte. Teraz wysyla komunikat do znalezionego okna za pomoca funkcji SendMesageTimeout. 4 pierwsze parametry to hwnd, msg, wparam, lparam, oraz wysyla jeszcze jakies parametry flage i jakis wskaznik. Caly problem polega na tym ze nie mozna tego wskaznika pobraz bo nie ma go ani w wparam, ani w lparam. Jak ktos moze mi powiedziec jak obsluzyc taki komunikat z SendMessageTimeout to bede wdzieczny. Sypne tez gotowym kodem jak zablokowac menedzera.

    Mam jeszcze pare pytan ale narazie poskromie swoja ciekawosc :P
    Za pomoc thanks

×
×
  • Utwórz nowe...