pykd/pykd/pyaux.h
SND\EreTIk_cp e4bbc369f9 [~] viod -> void
[+] variable for PyThread_StateSave

git-svn-id: https://pykd.svn.codeplex.com/svn@69451 9b283d60-5439-405e-af05-b73fd8c4d996
2011-08-31 17:36:15 +00:00

71 lines
1.5 KiB
C++

#pragma once
///////////////////////////////////////////////////////////////////////////////
// --> call back
// { PyThread_StateSave state( winext->getThreadState() );
// do_callback();
// }
//
// Ĺńëč ęîëáĺę áűë âűçâŕí č ďđč ýňîě ó ňĺęůĺăî ďîňîęŕ ńîőđŕíĺí ęîíňĺęńň ( áűë âűçîâ setExecutionStatus )
// ňî ďĺđĺä âűďîëíĺíčĺě ďčňîíîâńęîăî ęîäŕ íóćíî âîńńňŕíîâčňü ęîíňĺęńň, ŕ ďîńëĺ âîçâđŕňŕ óďđŕâëĺíč˙,
// ńíîâŕ ńîőđŕíčňü ĺăî
class PyThread_StateSave {
public:
PyThread_StateSave( PyThreadState **state )
: m_state(NULL)
{
if ( *state != NULL )
{
m_state = state;
PyEval_RestoreThread( *m_state );
}
}
~PyThread_StateSave() {
if (m_state)
*m_state =PyEval_SaveThread();
}
private:
PyThreadState **m_state;
};
// { PyThread_StateRestore state;
// long_or_block_opreration();
// }
class PyThread_StateRestore {
public:
explicit PyThread_StateRestore() {
m_state = &m_ownState;
*m_state =PyEval_SaveThread();
}
PyThread_StateRestore( PyThreadState **state ) {
if ( *state != NULL )
{
m_state = state;
*m_state =PyEval_SaveThread();
}
}
~PyThread_StateRestore() {
PyEval_RestoreThread( *m_state );
}
private:
PyThreadState **m_state;
PyThreadState *m_ownState;
};
///////////////////////////////////////////////////////////////////////////////