Witam! Jak mógłbym zrobić coś w stylu
if(warunek)
{
Strzel();
}
Chodzi dokładnie o To, że co np. 3 sekundy robi się jakąś rzecz.
Witam! Jak mógłbym zrobić coś w stylu
if(warunek)
{
Strzel();
}
Chodzi dokładnie o To, że co np. 3 sekundy robi się jakąś rzecz.
Daj sleepa
i po problemie.
#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std::chrono_literals;
int f()
{
std::this_thread::sleep_for(10s); //change value here to less than 1 second to see Success
return 1;
}
int f_wrapper()
{
std::mutex m;
std::condition_variable cv;
int retValue;
std::thread t([&m, &cv, &retValue]()
{
retValue = f();
cv.notify_one();
});
t.detach();
{
std::unique_lock<std::mutex> l(m);
if(cv.wait_for(l, 1s) == std::cv_status::timeout)
throw std::runtime_error("Timeout");
}
return retValue;
}
int main()
{
bool timedout = false;
try {
f_wrapper();
}
catch(std::runtime_error& e) {
std::cout << e.what() << std::endl;
timedout = true;
}
if(!timedout)
std::cout << "Success" << std::endl;
return 0;
}
tutaj masz przyklad
Jakiś event loop by się przydał. Możesz też robić to z osobnego wątku, ale jako nowicjusz będziesz miał z tym same problemy, lepiej będzie jak ogarniesz co to są eventloopy i jak się z nich korzysta.
To chyba w złym dziale posta dałem :P. Wiem jak działają eventy, loopy itp. Tylko moja sprawa wydała się tak łatwa do rozwiązania że nie chciałem innego działu zaśmiecać. Potrzebuje zrobić coś na zasadzie takiej jak pokazałem, gdzie w warunku biorę np.
if ( SDL_GetTicks () > 5000 ) {
Strzel();
}
Wykona się to tylko raz, Bo tylko raz get ticks będzie wynosiło 5000, A ja chciałbym żeby wykonywało się to od nowa i nowa... albo inaczej. Żeby strzał działał czemu czas, tylko z opóźnieniem się wykonywał.
unsigned int passedTime = SDL_GetTicks();
if (SDL_GetTicks() - jakiś deley >= passedTime)
{
Strzel();
//resetujemy timer
passedTime = SDL_GetTicks();
}
O coś takiego mi chodziło. Jeszcze za bardzo nie wiem dlaczego tak to działa, Ale rozrysuje sobie na kartce i się dowiem :D. Dzięki wielkie