使用soui开发的mbc,只支持windows版本
w1146869587
2022-01-24 479b1995ef435713c2cf4f0da8de3a6af6c30922
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
#include "ThreadObject.h"
#include <process.h>
#include <assert.h>
 
CThreadObject::CThreadObject() :m_hThread(0)
{
    m_evtStart = CreateEvent(NULL, TRUE, FALSE, NULL);
    m_evtStop = CreateEvent(NULL, TRUE, FALSE, NULL);
}
 
 
CThreadObject::~CThreadObject()
{
    EndThread(1000);
    CloseHandle(m_evtStart);
    CloseHandle(m_evtStop);
}
 
 
UINT CThreadObject::ThreadProc()
{
    SetEvent(m_evtStart);    //标记线程启动
    ResetEvent(m_evtStop);  //清除线程结束标志
    UINT uRet = Run();        //执行线程
    ResetEvent(m_evtStart); //清除线程启动标志
    return uRet;
}
 
 
UINT __stdcall CThreadObject::StaticTheadProc(LPVOID param)
{
    CThreadObject * _this = (CThreadObject*)param;
    return _this->ThreadProc();
}
 
BOOL CThreadObject::BeginThread()
{
    if (IsRunning()) return FALSE;
    m_hThread = (HANDLE)_beginthreadex(NULL, 0, &CThreadObject::StaticTheadProc, this, 0, NULL);
    if (m_hThread == NULL) return FALSE;
    DWORD dwRet = WaitForSingleObject(m_evtStart, INFINITE);
    return dwRet == WAIT_OBJECT_0;
}
 
BOOL CThreadObject::EndThread(DWORD dwWaitEndMS)
{
    if (!IsRunning()) return TRUE;
    assert(m_hThread);
    SetEvent(m_evtStop);
    if (WAIT_OBJECT_0 != WaitForSingleObject(m_hThread, dwWaitEndMS))
    {
        TerminateThread(m_hThread, (DWORD)-1);
    }
    CloseHandle(m_hThread);
    m_hThread = 0;
    return TRUE;
}
 
BOOL CThreadObject::IsRunning() const
{
    return WaitForSingleObject(m_evtStart, 0) == WAIT_OBJECT_0;
}
 
BOOL CThreadObject::IsStoped() const
{
    return WaitForSingleObject(m_evtStop, 0) == WAIT_OBJECT_0;    
}