diff options
author | Mark Spruiell <mes@zeroc.com> | 2012-04-25 11:19:48 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2012-04-25 11:19:48 -0700 |
commit | 9c81cdb4b04f83ee99c5c4126aa1e7ae93e7cabc (patch) | |
tree | e0de1a32212fec99274d244632902d2fd635f22f /py/modules/IcePy/Thread.cpp | |
parent | Removed bogus sl/chat/bin directory (diff) | |
download | ice-9c81cdb4b04f83ee99c5c4126aa1e7ae93e7cabc.tar.bz2 ice-9c81cdb4b04f83ee99c5c4126aa1e7ae93e7cabc.tar.xz ice-9c81cdb4b04f83ee99c5c4126aa1e7ae93e7cabc.zip |
misc. python cleanup
Diffstat (limited to 'py/modules/IcePy/Thread.cpp')
-rw-r--r-- | py/modules/IcePy/Thread.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/py/modules/IcePy/Thread.cpp b/py/modules/IcePy/Thread.cpp new file mode 100644 index 00000000000..235b26946f1 --- /dev/null +++ b/py/modules/IcePy/Thread.cpp @@ -0,0 +1,72 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifdef _WIN32 +# include <IceUtil/Config.h> +#endif +#include <Thread.h> + +using namespace std; +using namespace IcePy; + +IcePy::AllowThreads::AllowThreads() +{ + _state = PyEval_SaveThread(); +} + +IcePy::AllowThreads::~AllowThreads() +{ + PyEval_RestoreThread(_state); +} + +IcePy::AdoptThread::AdoptThread() +{ + _state = PyGILState_Ensure(); +} + +IcePy::AdoptThread::~AdoptThread() +{ + PyGILState_Release(_state); +} + +IcePy::ThreadHook::ThreadHook(PyObject* threadNotification) : + _threadNotification(threadNotification) +{ + Py_INCREF(threadNotification); +} + +void +IcePy::ThreadHook::start() +{ + AdoptThread adoptThread; // Ensure the current thread is able to call into Python. + + PyObjectHandle tmp = PyObject_CallMethod(_threadNotification.get(), STRCAST("start"), 0); + if(!tmp.get()) + { + throwPythonException(); + } +} + +void +IcePy::ThreadHook::stop() +{ + AdoptThread adoptThread; // Ensure the current thread is able to call into Python. + + PyObjectHandle tmp = PyObject_CallMethod(_threadNotification.get(), STRCAST("stop"), 0); + if(!tmp.get()) + { + throwPythonException(); + } +} + +PyObject* +IcePy::ThreadHook::getObject() +{ + return _threadNotification.get(); +} |