Witam potrzebuję wstawić Sleep(1000);
ale dostaję błąd, ponieważ używam komponentu, który się z tym gryzie
jest ambiguity between Sleep(unsigned int) and Sleep(unsigned long)
co z tym zrobić? mam zrobić jakąś pętlę, która będzie się wykonywała, żeby było opóźnienie? raczej słabe
jak mogę stworzyć własny sleep? (dotyczy c++ builder)
Samo Sleep(1000u)
nie pomoże?
A nie możesz użyć Timer'a i ustawić Interval
Timer1->Interval = 5000;
@Althorion: Tak, działa skąd te u, co znaczy? bo teoretycznie powinno być Sleep(1000)
No nie powinno być Sleep(1000)
, kompilator Ci nawet powiedział dlaczego — nie jest w stanie się domyślić, czy Ci chodziło o rzucenie tego 1000
na unsigned int
a, czy unsigned long
a.
A w trochę większych szczegółach — C++ ma całkiem sporo różnych typów całkowitoliczbowych, i mocno chaotyczny standard odnośnie tego, jakiego typu powinny być literały liczbowe (czyli liczby zapisane „jawnie” w kodzie, jak ten tysiąc). Jestem szczególnym „fanem” tego, że to zależy od bazy, w której są zapisane.
I tak, w szczególności, zapisanie „gołej” liczby oznacza, że może być ona traktowana jako int
, ale może być też traktowana jako long int
, a nawet long long int
. Ty masz dwa różne, przeciążone Sleep
y — jeden przyjmujący unsigned int
a, drugi przyjmujący unsigned long int
a. Kompilator by naturalnie rzutował do unsigned int
a, jakby miał int
a, a do unsigned long
a, jakby miał longa… ale nie wie, co ma, bo mu standard nie mówi, co ma mieć, więc się wywala i pyta programistę, o co mu chodziło. Zapisanie tego z przyrostkiem u
mu już to mówi — bo unsigned long int
ma przyrostek ul
, a unsigned long long int
— ull
, zatem już wie, o co chodziło, zatem nie musi dopytywać.
Lektura polecana: https://en.cppreference.com/w/cpp/language/integer_literal
Też tak macie, że jak słyszycie C++ builder + Sleep, to potwory wam się budzą w duszy ?
Czuję, że zaraz zamorduję jakiegoś kotka .
@tuz: Pokaż kod, zobaczymy co masz na wizji
tuz napisał(a):
Witam potrzebuję wstawić Sleep(1000);
ale dostaję błąd,
jak mogę stworzyć własny sleep? (dotyczy c++ builder)
Taaaa, nie rozumienie komunikatu o błędzie to bardzo dobry fundament, aby pisać swoją funkcję.
teoretycznie powinno być Sleep(1000)
Nie powinno. Obie funkcje, które zacytowałeś przyjmują wartości bez znaku (unsigned int, unsigned long), a Ty podałeś liczbę całkowitą ze znakiem. Konwersja do obu była równie łatwa, więc kompilator nie potrafił się zdecydować. Pisząc 1000u
mówisz unsigned int
, co daje exact match z jedną z sygnatur funkcji.
@tuz: raczej oba Sleepy powinny być w różnych przestrzeniach nazw i miałbyś lib1::Sleep(1000);
i lib2::Sleep(1000);
Przy czym na tym poziomie zaawansowania pytanie o Sleepa sprawia że stawiam, że pewnie masz inne problemy w tym kodzie i robisz coś bardzo źle.