原创 C++ IOCP問題備註

【1236錯誤】情況如下: 1.client連接server       2.client發送消息到server       3.client使用closesocket(sock);       4.server接收到關閉socket消息

原创 WSASend體會以及WSAENOBUFS錯誤思路

1. 投遞任意大小的緩衝區它都是立即返回 2. WSASend返回成功只是表示將數據拷貝到了緩衝區 3. GetQueuedCompletionStatus返回成功只表示發送成功,並不代表對方成功接收到數據 4. WSAWaitForMu

原创 Socket端口複用和非阻塞套接字

BOOL optval = TRUE; // 端口複用 if (SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&optval, sizeof(optv

原创 C++原子性加減(自增/自減)

long count = 0; _InterlockedIncrement(&count); //自增 _InterlockedDecrement(&count); //自減 宏 #include <xatomic.h>

原创 基礎數據類型值傳遞、指針傳遞的取捨

傳遞基礎數據類型的時候, 最重要的一點是看佔用空間大小,如果是32位系統, 想要傳遞int,  char,  short這種類型的話使用值傳遞比較好,因爲這些類型的佔用空間 <= 指針佔用空間(4字節),如果是long long類型的話則

原创 C++利用模板推導數組長度

大家學會點個贊哦 // 任意類型數組 template <typename T, int N> int ArraySize1(T(&arr)[N]) {

原创 C++最小堆實現

mini_heap.h #pragma once #include <cstdint> template <class T> class mini_heap { private: struct node { uint32_t s

原创 教你獲取new出的數組大小

之前在網上沒怎麼看到獲取數組大小的文章,現在給大家說一下自己的方法。 首先,C++new出的數組或者對象C++都是知道其內存大小的,既佔用字節,而這個佔用字節在哪兒呢,沒錯,就在變量地址 - 4個int佔用字節的大小 = 存放new對象的

原创 error LNK1266: 讀取檢測文件“*.pgd”時出錯;未找到文件

由於自己一頓胡亂操作,導致了error LNK1266錯誤,解決方案如下 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 其實這是因爲我們胡亂修改了項目屬性的

原创 C++ 死鎖檢測

csdn大多死鎖檢測代碼要積分,這裏我貢獻出自己昨天寫的死鎖檢測代碼給大家使用,代碼已精簡和優化 效果圖和使用代碼都可以看下圖 最典型的雙死鎖,效果圖: 再來看看三死鎖,效果圖: 其實在其他複雜的情況下也都能幫你檢測到死鎖發生

原创 如何保證在多線程中對象的有效性?進來告訴你

大家一定在網上看過其他文章,都是說用std::shared_ptr,其實還有一種情況,就是在std::shared_ptr也銷燬後的情況下調用對象的函數,這時候會直接拋出錯誤 那麼我們如何安全的使用一個對象呢,很簡單,利用std:

原创 C++用for遍歷自定義類

正確的做法是像STL容器那樣,創建一個迭代器類,然後裏面重載 !=(比較), ++(遞增),*(解引用) 這幾個函數。 例如: template <class T> class iterator { private: T* _d