In-place map modification worked
This commit is contained in:
parent
0a8f67e391
commit
c9d5251c71
|
@ -77,7 +77,8 @@ void GameEngine::manageTimer(std::string name, PyObject* target, int interval)
|
|||
{
|
||||
//Py_DECREF(timers[name].target);
|
||||
std::cout << "Erasing a timer" << std::endl;
|
||||
timers.erase(it);
|
||||
//timers.erase(it);
|
||||
timers[name] = std::make_shared<PyTimerCallable>(Py_None, 1000, runtime.getElapsedTime().asMilliseconds());
|
||||
std::cout << "It was erased" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
@ -94,9 +95,18 @@ void GameEngine::manageTimer(std::string name, PyObject* target, int interval)
|
|||
void GameEngine::testTimers()
|
||||
{
|
||||
int now = runtime.getElapsedTime().asMilliseconds();
|
||||
for (auto& [name, timer]: timers)
|
||||
//for (auto& [name, timer]: timers)
|
||||
auto it = timers.begin();
|
||||
while (it != timers.end())
|
||||
{
|
||||
timer->test(now);
|
||||
it->second->test(now);
|
||||
|
||||
if (it->second->isNone())
|
||||
{
|
||||
it = timers.erase(it);
|
||||
}
|
||||
else
|
||||
it++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,11 @@ PyObject* PyCallable::call(PyObject* args, PyObject* kwargs)
|
|||
return PyObject_Call(target, args, kwargs);
|
||||
}
|
||||
|
||||
bool PyCallable::isNone()
|
||||
{
|
||||
return (target == Py_None || target == NULL);
|
||||
}
|
||||
|
||||
PyTimerCallable::PyTimerCallable(PyObject* _target, int _interval, int now)
|
||||
: PyCallable(_target), interval(_interval), last_ran(now)
|
||||
{}
|
||||
|
|
|
@ -9,6 +9,8 @@ protected:
|
|||
PyCallable(PyObject*);
|
||||
~PyCallable();
|
||||
PyObject* call(PyObject*, PyObject*);
|
||||
public:
|
||||
bool isNone();
|
||||
};
|
||||
|
||||
class PyTimerCallable: public PyCallable
|
||||
|
|
|
@ -90,6 +90,7 @@ def remove_random():
|
|||
print("done")
|
||||
|
||||
import random
|
||||
import time
|
||||
def stress_test(*args):
|
||||
global running
|
||||
global timers
|
||||
|
@ -112,6 +113,10 @@ def stress_test(*args):
|
|||
#print(timers)
|
||||
print("Segfaultin' time")
|
||||
mcrfpy.delTimer("recurse")
|
||||
print("Does this still work?")
|
||||
time.sleep(0.5)
|
||||
print("How about now?")
|
||||
|
||||
|
||||
stress_test()
|
||||
|
||||
|
|
Loading…
Reference in New Issue