mirror of
https://github.com/rajkosto/mxoemu
synced 2026-08-14 02:26:05 -04:00
44 lines
785 B
C++
44 lines
785 B
C++
|
|
#include "SocketThread.h"
|
||
|
|
|
||
|
|
#ifdef ENABLE_DETACH
|
||
|
|
#include "Utility.h"
|
||
|
|
|
||
|
|
SocketThread::SocketThread(Socket *p)
|
||
|
|
:Thread(false)
|
||
|
|
,m_socket(p)
|
||
|
|
{
|
||
|
|
// Creator will release
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
SocketThread::~SocketThread()
|
||
|
|
{
|
||
|
|
if (IsRunning())
|
||
|
|
{
|
||
|
|
SetRelease(true);
|
||
|
|
SetRunning(false);
|
||
|
|
m_h.Release();
|
||
|
|
Utility::Sleep(5);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void SocketThread::Run()
|
||
|
|
{
|
||
|
|
m_h.SetSlave();
|
||
|
|
m_h.Add(m_socket);
|
||
|
|
m_socket -> SetSlaveHandler(&m_h);
|
||
|
|
m_socket -> OnDetached();
|
||
|
|
m_h.EnableRelease();
|
||
|
|
while (m_h.GetCount() && IsRunning())
|
||
|
|
{
|
||
|
|
m_h.Select(0, 500000);
|
||
|
|
}
|
||
|
|
// m_socket now deleted oops
|
||
|
|
// yeah oops m_socket delete its socket thread, that means this
|
||
|
|
// so Socket will no longer delete its socket thread, instead we do this:
|
||
|
|
SetDeleteOnExit();
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif // ENABLE_DETACH
|