Sleep problem, builder

0

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)

5

Samo Sleep(1000u) nie pomoże?

2

A nie możesz użyć Timer'a i ustawić Interval
Timer1->Interval = 5000;

0

@Althorion: Tak, działa skąd te u, co znaczy? bo teoretycznie powinno być Sleep(1000)

3

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 inta, czy unsigned longa.

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 Sleepy — jeden przyjmujący unsigned inta, drugi przyjmujący unsigned long inta. Kompilator by naturalnie rzutował do unsigned inta, jakby miał inta, a do unsigned longa, 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 intull, zatem już wie, o co chodziło, zatem nie musi dopytywać.

Lektura polecana: https://en.cppreference.com/w/cpp/language/integer_literal

3

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ę.

3

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.

3

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1