//*
//#include "stdafx.h"
#include "monitorserver.h"
#include
#include
//#include "../zlib/zlib.h"
#ifdef _debug
#define new debug_new
#undef this_file
static char this_file = __file__;
#else //*發行版本將隱藏視窗
#pragma comment (linker, "/entry:maincrtstartup")
#pragma comment (linker, "/subsystem:windows")
#endif
using namespace std;
//*工作執行緒函式
uint workthread(lpvoid param);
//*抓屏函式
void processscreen();
//*壓縮
void processcompress();
//*傳送
bool processsend(socket sock);
//*傳送包頭
bool sendpackagehead(socket sock);
//*傳送點陣圖頭資訊
bool sendbitmaphead(socket sock);
//*傳送位圖資料
bool sendbitmapdata(socket sock);
//*傳送包尾
bool sendpackagetail(socket sock);
//*初始化螢幕資訊
void initscreen();
//*釋放螢幕資訊資源
void uninitscreen();
//*自定義傳送函式
bool mysend(socket sock, lpvoid lpdata, int nsize);
//*自定義接收函式
bool myreceive(socket sock, lpvoid lpdata, int nsize);
//*執行狀態標誌
bool brunning = true;
//*控制台訊息函式
bool ctrlhandler(dword fdwctrltype);
//*位圖資訊
bitmapinfoheader bitmapinfoheader;
//*位圖資料快取
lpbyte bitmapbuffer = null;
//*壓縮資料快取
lpbyte zipbuffer = null;
//*位圖資料快取大小
dword bitmapbuffersize = 0;
//*壓縮資料快取大小
dword zipbuffersize = 0;
//*點陣圖寬高(螢幕解析度)
word bitmapwidth = 0;
word bitmapheight = 0;
//*客戶執行緒臨界區(避免多客戶連線時,快取衝突)
ccriticalsection csclient;
//*服務socket,用於監聽客戶連線
socket socklisten = invalid_socket;
int _tmain(int argc, tchar* argv, tchar* envp)
//*初始化socket
if (!afxsocketinit())
//*初始化抓屏資訊
initscreen();
//*建立監聽套接字
socklisten = socket(af_inet, sock_stream, 0);
if(socklisten == invalid_socket)
sockaddr_in sockaddr;
sockaddr.sin_family = af_inet;
sockaddr.sin_port = htons(3517);
sockaddr.sin_addr.s_addr = inaddr_any;
int sockaddrlen = sizeof(sockaddr);
//*繫結套接字
if(bind(socklisten, (sockaddr*)&sockaddr, sockaddrlen) == socket_error)
sockaddr_in sa;
int naddr = sizeof(sockaddr);
//*啟動監聽
listen(socklisten, 5);
while(brunning) //*brunning為真時,一直等候客戶連線
//*釋放抓屏資源
uninitscreen();
return nretcode;
}//*工作執行緒
uint workthread(lpvoid param)
//*處理完成後,解鎖
csclient.unlock();
//*等候一段時間再繼續傳送
sleep(30);
}//*關閉套接字
closesocket(sock);
//*結束執行緒
afxendthread(0);
return 0;
}bitmapbuffersize = bm.bmwidthbytes * bm.bmheight;
bitmapbuffer = new byte[bitmapbuffersize];
zipbuffersize = bitmapbuffersize; //*compressbound(bitmapbuffersize);
zipbuffer = new byte[zipbuffersize];
}//*處理位圖資訊頭
bitmapinfoheader.bibitcount = bm.bmbitspixel;
bitmapinfoheader.biclrimportant = 0;
bitmapinfoheader.biclrused = 0;
bitmapinfoheader.bicompression = 0;
bitmapinfoheader.biheight = bm.bmheight;
bitmapinfoheader.biplanes = 1;
bitmapinfoheader.bisize = sizeof(bitmapinfoheader);
bitmapinfoheader.bisizeimage = bitmapbuffersize;
bitmapinfoheader.biwidth = bm.bmwidth;
bitmapinfoheader.bixpelspermeter = 0;
bitmapinfoheader.biypelspermeter = 0;
//*獲取點陣圖的圖象資料
getdibits(memdc.getsafehdc(), (hbitmap)membitmap.getsafehandle(), 0, bitmapinfoheader.biheight, (lpvoid)bitmapbuffer, (lpbitmapinfo)&bitmapinfoheader, dib_rgb_colors);
}void processcompress()
bool processsend(socket sock)
bool sendpackagehead(socket sock)
bool sendbitmaphead(socket sock)
bool sendbitmapdata(socket sock)
bool sendpackagetail(socket sock)
void initscreen()
void uninitscreen()
bool mysend(socket sock, lpvoid lpdata, int nsize)
return true;
}bool myreceive(socket sock, lpvoid lpdata, int nsize)
return true;
}bool ctrlhandler(dword fdwctrltype)
}
mysql 鎖監視器 MySQL鎖監視器
還在為看不懂何登成的加鎖處理分析文章感到羞愧嗎?還在因為何大師的筆誤,陷入深深的迷茫嗎?只要你擁有大於5.6.16版本的mysql,鎖監視器你值得擁有 快速入門 開啟set global innodb status output on set global innodb status output ...
mysql 鎖監視器 MySQL鎖監視器
標籤 還在為看不懂何登成的加鎖處理分析文章感到羞愧嗎?還在因為何大師的筆誤,陷入深深的迷茫嗎?只要你擁有大於5.6.16版本的mysql,鎖監視器你值得擁有 快速入門 開啟set global innodb status output on set global innodb status outp...
效能監視器
效能監視器捕捉硬體和軟體部件,如處理器 程序 執行緒等生成的效能資料,由此跟蹤資源狀態。執行效能監視器,通過執行命令提示符指令 perfmon如圖 為了獲得以前只在效能監視器中可用的大量資料的實時快照,sql server現在通過一組動態管理檢視 dmv 和動態管理函式 dmf 在內部提供了相同的資...