PDAclub.pl - Forum użytkowników technologii mobilnych

Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: lemkat w Październik 09, 2005, 21:35:44

Tytuł: AfxBeginThread
Wiadomość wysłana przez: lemkat w Październik 09, 2005, 21:35:44
Witam

Czy ktos moze mi powiedziec o co biega kompilatorowi.

Mam skladowa funkcje klasy:
class CTest001Dlg : public CDialog
{
....
UINT MyProc( LPVOID pParam );
....
};

i teraz w funkcji chce utworzyc proces:

BOOL CTest001Dlg::OnInitDialog()
{
....
AfxBeginThread( MyProc,  NULL,THREAD_PRIORITY_NORMAL,0,0,NULL );
....
}

a kompilator sie burze ze pierwszy argument jest nieprawidlowy

D:\programowanie\WindowsCE\test001\test001Dlg.cpp(66) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'


prubowalem tez umiesic funkcje poza klasa ale problem jest ten sam
Tytuł: AfxBeginThread
Wiadomość wysłana przez: darekkot w Październik 09, 2005, 22:50:52
Kompilator oczekuje, ze dostanie wskaznik do globalnej funkcji, a ty mu podajesz funkcje skladowa klasy.
Musisz zadeklarowac te funkcje jako globalna.
Tytuł: AfxBeginThread
Wiadomość wysłana przez: lemkat w Październik 09, 2005, 23:34:49
Tak jak juz pisalem ta funkcja byla rownierz deklarowana poza klasa jako funkcja globalna i problem byl ten sam.
Wedlug kompilatora typ funkcji jest nieprawidlowy UINT a kompilator chce void*
ale z dokumentacji wynika ze funkcja powinna byc zdeklarowana jako UINT ;(

Jakas totalna bzdura jak zmienilem typ funkcji na LPVOID to kompilator wysypal

D:\programowanie\WindowsCE\test002\test002Dlg.cpp(65) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'void *(void *)'
Tytuł: AfxBeginThread
Wiadomość wysłana przez: timokie w Październik 10, 2005, 00:40:46
Zadeklaruj funkcje albo jako globalna (poza klasa), albo jako funkcje statyczna w obrebie klasy (static UINT MyProc ... ), a uruchamiajac watek:
AfxBeginThread ((AFX_THREADPROC)MyProc, ... );
Tytuł: AfxBeginThread
Wiadomość wysłana przez: MacBirdie w Październik 10, 2005, 00:45:03
Właśnie - typ zwracany przez MyProc, to jedno, a typ wskaźnika, jaki do niej podajesz, to inna sprawa. Zapewne AFX_THREADPROC to typedef czegoś a'la void* ;)
Tytuł: AfxBeginThread
Wiadomość wysłana przez: lemkat w Październik 10, 2005, 19:58:18
Proces juz moge utworzyc tylko jest maly problem, w tym procesie chce operowac na zmiennych typu int reprezentujacych edit box i bedacych skladnikiem tej klasy. Jesli funkcja jest zdeklarowana w klasie to jest typu static wiec moze operowac na zmiennych typu static a te zmienne nie sa static. Jak zdeklarowalem funkcje na zewnatrz poza klasa tak ze nie byla static i wewnatrz utworzylem obiekt reprezentujacy klase i tam zmienniam zmienne to wszystko sie kompiluje ale w momencie uruchomienia aplikacji mam error "Unsupportet operation".

;(

Ogolnie idea jest taka:
Mam na formie utworzone dwie kontrolki Edit box do nich sa przypisane zmiennet typu int m_AllMemory i m_FreeMemory.
Teraz potrzebuje utworzyc proces ktory np co 2 sek. sprawdza stan pamieci i zapisuje je do zmiennych m_AllMemory i m_FreeMemory a nastepnie updatuje  dane przy uzyciu UpdateData( false );
Tytuł: AfxBeginThread
Wiadomość wysłana przez: darekkot w Październik 10, 2005, 23:15:27
Trzeba zastosowac trick. Jednym z parametrow funkcji jest (LPVOID pParam) W wywolaniu uzyj w miejscu tego parametru this. Nastepnie na poczatku funkcji zrzutuj ten parametr na wskaznik do twojej klasy i ... juz mozesz korzystac ze skaldnikow klasy. Niestety tylko publicznych. Aby to obejsc, musialbys dziedziczyc od tej klasy .....
Tytuł: AfxBeginThread
Wiadomość wysłana przez: lemkat w Październik 11, 2005, 21:59:54
Witam

Dzieki za pomoc, zadzialalo ;) jesli ktos ma ochote rzucic okiem na program to zapraszam: http://www.lemkat.hotshoot.webd.pl

dzial programy a tam ProcManager

Pozdrawiam i do zobaczenia przy nastepnym poscie ;)
Tytuł: AfxBeginThread
Wiadomość wysłana przez: darekkot w Październik 11, 2005, 22:31:50
Fajnie, tylko czemu wersja jest na tak egzotyczny procek?
Moze zrobimy liste zyczen co do wymazonego taskmanagera i  wspolnie cos takiego stworzymy? Szkielet juz jest. Ja od dawna szukam... Poki co korzystam z wisbara, ale moze Twoj bedzie lepszy...
Tytuł: AfxBeginThread
Wiadomość wysłana przez: lemkat w Październik 11, 2005, 22:59:54
Odpowiedz na twoje pytanko co do procka jest dos prozaiczna a mianowicie mam starego poketa wlasnie z tym prockiem i tylko na takim pokecie moge potestowac sofick. Co do stworzenia jakiegos projektu to jestem otwarty na wszelkie propozycje.

Pozdrawiam
Tytuł: AfxBeginThread
Wiadomość wysłana przez: darekkot w Październik 11, 2005, 23:14:35
No to ja moge testowac, pomoc w pisaniu fragmentow kodu oraz wymyslec jak powinien dzialac moj wymazony taskmanager. Czekamy na innych chetnych. Moze lepiej by bylo otworzyc nowy watek np. moj wymazony taskmanager, bo do tego dzialu zaglada tylko garstka zakreconych

Juz sie ciesze na nowego task manager-a. A moze tez wersja dla smartphone?

Pozdrowiam
Tytuł: AfxBeginThread
Wiadomość wysłana przez: lemkat w Październik 11, 2005, 23:17:42
Ok mozemy odpalic nowy watek taskmanagera ;)
Jestem ciekawy jakie ludzie chcieli by miec w nim funkcje, w jakim dziale go  chcesz otworzyc ?
Tytuł: AfxBeginThread
Wiadomość wysłana przez: darekkot w Październik 11, 2005, 23:24:17
To Twoj pomysl i prj wiec Twoja decyzja. Mysle ze moze pocket pc?