原创 圖片拖動並交換圖片-使用觀察者模式

使用觀察者模式來做。主窗口是觀察者,圖片控件是被觀察者, 圖片被拖動的時候,圖片控件要通知觀察者,移動之後的位置座標+圖片控件本身的索引號 MySubject.h(被觀察者-抽象類) #ifndef MYSUBJECT_H #define

原创 圖片拖動並交換圖片

Hero.h #ifndef HERO_H #define HERO_H #include <QToolButton> #include <QMouseEvent> class Hero : public QToolButton {

原创 27.多線程,分組服務端,1萬客戶端連接,每秒處理200萬包

問題:網絡抖動,不能穩定在每秒鐘,200萬個包。波動比較大,80萬----300萬之間波動。 服務端: CELLTimestamp.hpp #ifndef _CELLTimestamp_hpp_ #define _CELLTimestam

原创 26.服務端單線程模式下性能瓶頸測試

VS2015 提供的性能探查器,可以看到程序的哪部分代碼佔用了多少的cpu 可以看到 FD_SET select FD_ISSET recv這幾個個函數佔用的cpu比較高 將服務端改造成,多線程分組處理多客戶端 1.分離處理客戶端連接的函數

原创 24.原子操作

參考資料:https://zhuanlan.zhihu.com/p/107092432 所謂原子操作,就是多線程程序中“最小的且不可並行化的”操作。 對於在多個線程間共享的一個資源而言,這意味着同一時刻,多個線程中有且僅有一個線程在對這個資

原创 25.客戶端多線程分組模擬高頻併發數據

兩種結構的客戶端對比網絡消息性能 服務端均爲單線程服務端。 1.單線程客戶端,1000個連接  2.多線程客戶端,4個線程,每個線程250個連接 結論:多線程的客戶端,網絡性能提升非常大。 -------------------------

原创 22.線程自解鎖

代碼結構比較複雜的情況下,手動加鎖,解鎖,可能會有所遺漏。 這種情況下,推薦使用自解鎖(自解鎖在構造的時候lock,在析構的時候unlock)(對象在超出作用域時會執行析構) 自解鎖,手動鎖優缺點:自解鎖每次都會構造,析構。在執行效率上沒有

原创 23.線程鎖的使用

不合理的設定臨界區域,會讓線程的調用失去意義。 1.不應該頻繁的使用鎖 2.減小鎖使用的區域,線程公共資源之外 的資源 儘量不要放到臨界區。 -------------------------------------------------

原创 21.多線程-鎖與臨界區域

不合理的設定臨界區域,會讓線程的調用失去意義。 代碼一: #include <iostream> #include <thread> #include <mutex> using namespace std; mutex m_lock

原创 19.添加高精度計時器測量處理能力

在windows系統下可以使用“資源監視器”來查看網絡活動詳情。 在服務端代碼中添加一個高精度計時器,統計每秒鐘收到了多少個完整數據包。 c++11 chrono(高精度時鐘,可達納秒級別) 客戶端: DataHeader.hpp #if

原创 20.多線程-基本代碼

示例一: #include <iostream> #include <thread> using namespace std; void thread1() { for (int n = 0; n<4; n++)

原创 18.windows使用select突破64個socket

windows默認FD_SETSIZE大小爲64,Linux的select默認只支持1024個句柄 在引入#include <WinSock2.h>之前,定義: #define FD_SETSIZE      1024 就能實現突破64個s

原创 17.windows平臺穩定性,高吞吐

1.網絡收發穩定性 2.windows使用select達到連接上限 服務端在執行select時SOCKET上限數量爲FD_SETSIZE windows系統定義: #define FD_SETSIZE      64 typedef str

原创 16.服務端、客戶端解決粘包問題,服務端加入退出指令線程

客戶端: DataHeader.hpp #ifndef _MessageHeader_hpp_ #define _MessageHeader_hpp_ enum CMD { CMD_LOGIN, CMD_LOGIN_R

原创 15.爲什麼會粘包

1、發送端 send   SendBuf 發送緩衝區(在各種操作系統下面緩衝區大小存在差異)   2、   網絡傳輸層   數據流         3、接收端   RecvBuf 接收緩衝區 select    recv