Doc
-
Postów
0 -
Dołączył
-
Ostatnio
Nigdy
Typ zawartości
Profile
Fora
Kalendarz
Articles
Pliki
Posty napisane przez Doc
-
-
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. -
-
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 :/
-
Dzieki za odpowiedz. Wiele mi wyjasnilo bo nie wiedzialem o tym motywie, ale czemu jak przypisuje się liczbę np. 4.123 do zmiennej double to czemu są takie motywy. Przecież to jest liczba określona jednoznacznie bez żadnych śmieci na końcu???
-
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.12liczba=1.2
calosci=1
ulamki=0.2liczba=2
calosci=2
ulamki=1.06581e-014liczba=1.06581e-013
calosci=0
ulamki=1.06581e-013liczba=1.06581e-012
calosci=0
ulamki=1.06581e-012liczba=1.06581e-011
calosci=0
ulamki=1.06581e-011liczba=1.06581e-010
calosci=0
ulamki=1.06581e-010liczba=1.06581e-009
calosci=0
ulamki=1.06581e-009liczba=1.06581e-008
calosci=0
ulamki=1.06581e-008liczba=1.06581e-007
calosci=0
ulamki=1.06581e-007liczba=1.06581e-006
calosci=0
ulamki=1.06581e-006liczba=1.06581e-005
calosci=0
ulamki=1.06581e-005liczba=0.000106581
calosci=0
ulamki=0.000106581liczba=0.00106581
calosci=0
ulamki=0.00106581liczba=0.0106581
calosci=0
ulamki=0.0106581liczba=0.106581
calosci=0
ulamki=0.106581liczba=1.06581
calosci=1
ulamki=0.0658141liczba=0.658141
calosci=0
ulamki=0.658141liczba=6.58141
calosci=6
ulamki=0.58141liczba=5.8141
calosci=5
ulamki=0.814104liczba=8.14104
calosci=8
ulamki=0.141036liczba=1.41036
calosci=1
ulamki=0.410364liczba=4.10364
calosci=4
ulamki=0.10364liczba=1.0364
calosci=1
ulamki=0.0364015liczba=0.364015
calosci=0
ulamki=0.364015liczba=3.64015
calosci=3
ulamki=0.64015liczba=6.4015
calosci=6
ulamki=0.401503liczba=4.01503
calosci=4
ulamki=0.0150279liczba=0.150279
calosci=0
ulamki=0.150279liczba=1.50279
calosci=1
ulamki=0.502788liczba=5.02788
calosci=5
ulamki=0.0278807liczba=0.278807
calosci=0
ulamki=0.278807liczba=2.78807
calosci=2
ulamki=0.788067liczba=7.88067
calosci=7
ulamki=0.880669liczba=8.80669
calosci=8
ulamki=0.806686liczba=8.06686
calosci=8
ulamki=0.066864liczba=0.66864
calosci=0
ulamki=0.66864liczba=6.6864
calosci=6
ulamki=0.686401liczba=6.86401
calosci=6
ulamki=0.864014liczba=8.64014
calosci=8
ulamki=0.640137liczba=6.40137
calosci=6
ulamki=0.401367liczba=4.01367
calosci=4
ulamki=0.0136719liczba=0.136719
calosci=0
ulamki=0.136719liczba=1.36719
calosci=1
ulamki=0.367188liczba=3.67188
calosci=3
ulamki=0.671875liczba=6.71875
calosci=6
ulamki=0.71875liczba=7.1875
calosci=7
ulamki=0.1875liczba=1.875
calosci=1
ulamki=0.875liczba=8.75
calosci=8
ulamki=0.75liczba=7.5
calosci=7
ulamki=0.5liczba=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 -
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. -
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) -
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ć.
-
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 :? -
Po paru godzinach debugowania doszedlem do tego ze:
po pierwsze szuka okna
po drugie wysyla komunikatnie 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????
-
-
-
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.
-
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.
-
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???? -
Dzieki za linka.
Jak tylko ktos mi to przetlumaczy to wezme sie do roboty ;P
(Zart oczywiscie heh ) ale na serio jak tylko cos mi z tego wyjdzie to zamieszcze troche kodu (jesli ktos wogole jest zainteresowany ???) -
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
Jak nie przesadzić z ilością wątków w programie ?
w C
Napisano
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