Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przekazwanie argumentów funkcji wywoływanej z _beginthread

Ostatnio zmodyfikowano 2012-05-29 22:01
Autor Wiadomość
pawajoro
Temat założony przez niniejszego użytkownika
Przekazwanie argumentów funkcji wywoływanej z _beginthread
» 2012-05-29 20:39:01
Mianowicie kod:
_beginthread( window( okno ), 0, 0 );
. Kompilator wywala mia błąd.Czy można przekazać argument tej funkcj?
P-57465
m4tx
» 2012-05-29 20:42:52
Kompilator wywala mia błąd
A jakie błędy? Wróżkami nie jesteśmy :)
P-57466
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-05-29 20:45:10
1>SPWN.cpp(661): error C2664: '_beginthread' : cannot convert parameter 1 from 'void' to 'void (__cdecl *)(void *)'
Tadam, magiczna kula odpowiada :)
P-57467
xevuel
» 2012-05-29 20:48:05
window( okno )
 tu masz błąd, powinieneś przekazać jedynie wskaźnik na funkcję, na dodatek zwracającą void i przyjmującą jako argument void*. A argumenty do funkcji przekazujesz jako ostatni argument funkcji _beginthread. Zapraszam tutaj: » Kurs WinAPI, C++ » ZaawansowaneWątki lekcja :)
P-57468
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-05-29 21:31:09
I...
1>SPWN.cpp(24): error C2065: 'okno' : undeclared identifier
1>SPWN.cpp(661): error C2664: '_beginthread' : cannot convert parameter 1 from 'void (__clrcall *)(void *)' to 'void (__cdecl *)(void *)'
1>          Address of a function yields __clrcall calling convention in /clr:pure and /clr:safe; consider using __clrcall in target type
A oto kody:
C/C++
void window( void * Args )
{
    Application::Run( okno );
    Close();
}
//...
_beginthread( window, 0, okno );
P-57475
xevuel
» 2012-05-29 21:34:13
Bardzo ważną rzeczą jest tutaj konwencja wywołania funkcji – dla procedury wątku tworzonego przez _beginthread musi to być __cdecl.

A z pierwszym błędem powinieneś poradzić sobie sam, wystarczy przeczytać co jest napisane w logu.
P-57476
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-05-29 21:42:19
No i porażka bo CRL:
1>------ Build started: Project: SPWN, Configuration: Debug Win32 ------
1>  SPWN.cpp
1>SPWN.cpp(22): error C3641: 'window' : invalid calling convention '__cdecl ' for function compiled with /clr:pure or /clr:safe
1>SPWN.cpp(24): error C2065: 'okno' : undeclared identifier
1>SPWN.cpp(25): error C3861: 'Close': identifier not found
1>SPWN.cpp(559): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
1>SPWN.cpp(565): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
1>SPWN.cpp(638): warning C4244: 'argument' : conversion from 'float' to 'int', possible loss of data
1>SPWN.cpp(661): error C2664: '_beginthread' : cannot convert parameter 1 from 'void (__cdecl *)(void *)' to 'void (__cdecl *)(void *)'
1>          Address of a function yields __clrcall calling convention in /clr:pure and /clr:safe; consider using __clrcall in target type
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Również dlatego, że wpisałem
void __cdecl window( void * Args )
P-57477
xevuel
» 2012-05-29 22:01:44
Błędy od 3 do 6 nie są związane z tematem. 2 błąd to brak Twojej dobrej woli poświęcenia pół minuty i przeczytania treści tegoż błędu.

Niestety, nie umiem ci pomóc z pozostałymi błędami, a to dlatego, że nie używam Visuala na co dzień, a pod MinGW ten kod działał. Nie wiem, jedyne co mogę teraz zrobić, to polecić ci jeszcze raz do przeczytania ten kurs, bo o ile mi wiadomo, ta część kursu jest pisana pod Visualem (co zresztą wynika z końcowej części tutoriala)

Btw., bardzo mnie zastanawia ta linijka:
error C2664: '_beginthread' : cannot convert parameter 1 from 'void (__cdecl *)(void *)' to 'void (__cdecl *)(void *)'

//Na MSDN'ie masz przykładowy kod:
http://msdn.microsoft.com/en-us/library/aa246693%28v=vs.60%29.aspx
i cytat:
If you are using the Visual C++ development environment, select the Multi-Threaded runtime library in the compiler Project Settings dialog box.
Może to coś pomoże.
P-57478
« 1 »
  Strona 1 z 1