ďťż

Ł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
  •