Ĺadny brzuch
Tym razem nie chodzi o problemy ze składnią tylko o to że w C++ Bulidzerze 6 one nie działają :huh: Dołączam plik nagłówkowy <process.h> i w jego deklaracji jest funkcja _beginthread(jakieś tam argumenty:P), ale kiedy chcę jej użyć to kompilator zgłasza błąd że nie zna nazwy " _beginthread" :mad:
PS.
W DevC++ wszystko jest w porządku
Jeśli piszesz w win32 możesz użyć funkcji CreateThread z winapi (windows.h):unsigned long __stdcall MojWatek(Pointer param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } utworzenie wątku: unsigned long watek; void* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); // parametr nie jest konieczny
Użytkownik Cyrkiel edytował ten post 17 luty 2006, 18:22
Jeśli piszesz w win32 możesz użyć funkcji CreateThread z winapi (windows.h):unsigned long __stdcall MojWatek(Pointer param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } utworzenie wątku: unsigned long watek; void* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); // parametr nie jest konieczny
W tym momencie masz do wyboru:
-korzystać dalej z tego śmiesznego bcb
-korzystać z dobrego środowiska i kompilatora (Dev-Cpp, VC++ 2005 EE)
Niestety wywala błąd : Invalid conversion void(*)() to DWORD(*)() Dlaczego mi nie wywala błędu? <_< Przepisz wszystkie błędy, w którym dokładnie miejscu jest invalid conversion?
Dla dev-cpp:#include <windows.h> unsigned long __stdcall MojWatek(void*param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } int main() { unsigned long watek; char* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); }
W tym momencie masz do wyboru:
-korzystać dalej z tego śmiesznego bcb
-korzystać z dobrego środowiska i kompilatora (Dev-Cpp, VC++ 2005 EE)
Dlaczego mi nie wywala błędu? <_< Przepisz wszystkie błędy, w którym dokładnie miejscu jest invalid conversion?
Dla dev-cpp:#include <windows.h> unsigned long __stdcall MojWatek(void*param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } int main() { unsigned long watek; char* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); }
Cyrkiel, ale w czym TY kompilujesz :rolleyes: ??
Cyrkiel, ale w czym TY kompilujesz :rolleyes: ?? Poprzedni kod był dla bcb, a drugi dla dev, wszystkie działają, bo sprawdzałem <_<
Popatrz na twój pierwszy kod dopiero teraz to zuważyłem :P
void* parametr = "LOL :)";
To przez to chyba ;)
Zmień na char* :rolleyes:
Użytkownik Cyrkiel edytował ten post 01 marzec 2006, 19:55
Zmień na char* :rolleyes:
Jest jeszcze jeden problem bo jak do wątku wsadze jakąs swoją klasę to tworzony jest obiekt a potem już nic nie działa tj. funkcja "wątkowa" jest zatrzymywana po stworzeniu obiektu.
Może opiszę dokładniej problem, załużmy że mam taki kod:
#include <conio.h> #include <winbgim.h> class moja { Â public: Â Â Â Â void rysuj_pixele() { // instrukcje odpowiadające za rysowanie(w nieskończonej pętli!) poziomo pixeli co 200 milisekund;) } }; unsigned long watek; char* parametr = "cos tam"; unsigned long __stdcall MojWatek(void*param); int main() { Â ....... Â // funkcja odpowiedzialna za incjalizacje okna(funkcja initgraph()) Â ....... // instrukcje które rysują( w nieskończonej pętli!) jakieś głupoty na ekranie // rysowanie głupot +poziomo pixeli(uruchomienie wątku;) CreateThread(NULL,0,MojWatek,parametr,0,&watek); Â while(1) { getch(); } return 0; } unsigned long __stdcall MojWatek(void*param) { Â moja obiekt1; Â obiekt1.rysuj_pixele(); }
Probelm w tym że po takim uruchomieniu wątku nic się nie rysuje(to znaczy głupoty tak, ale pixele nie :P ), a jeśli funkcję rysuj_pixele() zrobię funkcję zwykłą to wszystko działa spoko :huh:
O co chodzi??
Użytkownik Mateusz_sweetpp edytował ten post 08 marzec 2006, 13:47
Po co dajesz "nieskończoną pętlę" przed utworzeniem wątku? :> Zamień to.
Proszę moderów a NIE zamykanie topicu !! ;)
Użytkownik Mateusz_sweetpp edytował ten post 09 marzec 2006, 16:36
Powyższy problem rozwiązałem, ale jest już następny <_<
Tym razem chodzi o zakończenie wątku. Znalazłem dwie funkcje ExitThread(argumet) oraz TerminateThread(argument, argument). Sęk w tym że ani jeden ani drugi nie kończy pracy wątku :(
EDIT: Tamtego kodu z góry:
#include <conio.h> #include <winbgim.h> class moja { Â public: Â Â Â void rysuj_pixele() { // instrukcje odpowiadające za rysowanie(w nieskończonej pętli!) poziomo pixeli co 200 milisekund;) } }; unsigned long watek; char* parametr = "cos tam"; unsigned long __stdcall MojWatek(void*param); int main() { ....... Â // funkcja odpowiedzialna za incjalizacje okna(funkcja initgraph()) // rysowanie głupot +poziomo pixeli(uruchomienie wątku;) CreateThread(NULL,0,MojWatek,parametr,0,&watek); while(1) { Â if (kbhit()) { TerminateThread(MojWatek,&watek); } ....... // instrukcje które rysują( w nieskończonej pętli!) jakieś głupoty na ekranie } return 0; } unsigned long __stdcall MojWatek(void*param) { moja obiekt1; obiekt1.rysuj_pixele(); }
Niestety to nie działa :rolleyes:
Proszę o pomoc ^_^
Użytkownik Mateusz_sweetpp edytował ten post 10 marzec 2006, 14:26
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
PS.
W DevC++ wszystko jest w porządku
Jeśli piszesz w win32 możesz użyć funkcji CreateThread z winapi (windows.h):unsigned long __stdcall MojWatek(Pointer param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } utworzenie wątku: unsigned long watek; void* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); // parametr nie jest konieczny
Użytkownik Cyrkiel edytował ten post 17 luty 2006, 18:22
Jeśli piszesz w win32 możesz użyć funkcji CreateThread z winapi (windows.h):unsigned long __stdcall MojWatek(Pointer param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } utworzenie wątku: unsigned long watek; void* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); // parametr nie jest konieczny

W tym momencie masz do wyboru:
-korzystać dalej z tego śmiesznego bcb
-korzystać z dobrego środowiska i kompilatora (Dev-Cpp, VC++ 2005 EE)
Niestety wywala błąd : Invalid conversion void(*)() to DWORD(*)() Dlaczego mi nie wywala błędu? <_< Przepisz wszystkie błędy, w którym dokładnie miejscu jest invalid conversion?
Dla dev-cpp:#include <windows.h> unsigned long __stdcall MojWatek(void*param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } int main() { unsigned long watek; char* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); }
W tym momencie masz do wyboru:
-korzystać dalej z tego śmiesznego bcb
-korzystać z dobrego środowiska i kompilatora (Dev-Cpp, VC++ 2005 EE)

Dlaczego mi nie wywala błędu? <_< Przepisz wszystkie błędy, w którym dokładnie miejscu jest invalid conversion?
Dla dev-cpp:#include <windows.h> unsigned long __stdcall MojWatek(void*param) { MessageBox(NULL,(char*) param,"Wiadomosc",64); } int main() { unsigned long watek; char* parametr = "LOL :)"; CreateThread(NULL,0,MojWatek,parametr,0,&watek); }

Cyrkiel, ale w czym TY kompilujesz :rolleyes: ??

Cyrkiel, ale w czym TY kompilujesz :rolleyes: ?? Poprzedni kod był dla bcb, a drugi dla dev, wszystkie działają, bo sprawdzałem <_<
Popatrz na twój pierwszy kod dopiero teraz to zuważyłem :P
void* parametr = "LOL :)";
To przez to chyba ;)
Zmień na char* :rolleyes:
Użytkownik Cyrkiel edytował ten post 01 marzec 2006, 19:55
Zmień na char* :rolleyes:

Jest jeszcze jeden problem bo jak do wątku wsadze jakąs swoją klasę to tworzony jest obiekt a potem już nic nie działa tj. funkcja "wątkowa" jest zatrzymywana po stworzeniu obiektu.
Może opiszę dokładniej problem, załużmy że mam taki kod:
#include <conio.h> #include <winbgim.h> class moja { Â public: Â Â Â Â void rysuj_pixele() { // instrukcje odpowiadające za rysowanie(w nieskończonej pętli!) poziomo pixeli co 200 milisekund;) } }; unsigned long watek; char* parametr = "cos tam"; unsigned long __stdcall MojWatek(void*param); int main() { Â ....... Â // funkcja odpowiedzialna za incjalizacje okna(funkcja initgraph()) Â ....... // instrukcje które rysują( w nieskończonej pętli!) jakieś głupoty na ekranie // rysowanie głupot +poziomo pixeli(uruchomienie wątku;) CreateThread(NULL,0,MojWatek,parametr,0,&watek); Â while(1) { getch(); } return 0; } unsigned long __stdcall MojWatek(void*param) { Â moja obiekt1; Â obiekt1.rysuj_pixele(); }
Probelm w tym że po takim uruchomieniu wątku nic się nie rysuje(to znaczy głupoty tak, ale pixele nie :P ), a jeśli funkcję rysuj_pixele() zrobię funkcję zwykłą to wszystko działa spoko :huh:
O co chodzi??
Użytkownik Mateusz_sweetpp edytował ten post 08 marzec 2006, 13:47
Po co dajesz "nieskończoną pętlę" przed utworzeniem wątku? :> Zamień to.
Proszę moderów a NIE zamykanie topicu !! ;)
Użytkownik Mateusz_sweetpp edytował ten post 09 marzec 2006, 16:36
Powyższy problem rozwiązałem, ale jest już następny <_<
Tym razem chodzi o zakończenie wątku. Znalazłem dwie funkcje ExitThread(argumet) oraz TerminateThread(argument, argument). Sęk w tym że ani jeden ani drugi nie kończy pracy wątku :(
EDIT: Tamtego kodu z góry:
#include <conio.h> #include <winbgim.h> class moja { Â public: Â Â Â void rysuj_pixele() { // instrukcje odpowiadające za rysowanie(w nieskończonej pętli!) poziomo pixeli co 200 milisekund;) } }; unsigned long watek; char* parametr = "cos tam"; unsigned long __stdcall MojWatek(void*param); int main() { ....... Â // funkcja odpowiedzialna za incjalizacje okna(funkcja initgraph()) // rysowanie głupot +poziomo pixeli(uruchomienie wątku;) CreateThread(NULL,0,MojWatek,parametr,0,&watek); while(1) { Â if (kbhit()) { TerminateThread(MojWatek,&watek); } ....... // instrukcje które rysują( w nieskończonej pętli!) jakieś głupoty na ekranie } return 0; } unsigned long __stdcall MojWatek(void*param) { moja obiekt1; obiekt1.rysuj_pixele(); }
Niestety to nie działa :rolleyes:
Proszę o pomoc ^_^
Użytkownik Mateusz_sweetpp edytował ten post 10 marzec 2006, 14:26