文章目錄 1. shared_ptr 介紹2. shared_ptr 的構造3. shared_ptr 擷取引用計數或原始指標4. 減少引用計數5. shared_ptr 的析構6. 向原始指標一樣使用shared_ptr7. Lock Free引用計數實現 1. shared_ptr 介紹 使用過Boost的話對shared_ptr一定有很深的印象。多個shared_ptr指向同一個對象,每個shared_ptr會使對象的引用計數加+
UtraEdit 支援Lua高亮,網上已經有很多方法,但是都是基於相對老一點的UE,在15.10版本中,UE支援Lua高亮的方法如下:從網上Down下支援Lua的wordfiles,lua.uew建立一個目錄如D:\wordfiles,將UE安裝目錄下的所有wordfiles檔案都複製到D:\wordfiles,再將自己的lua.uew拷貝到此,設定UE
更新: 封裝了epoll和socket,目前是單線程版本問題: 對於epoll_wait操作,何時將會觸發EPOLLERR? 伺服器端close掉socket時候,如何保證EPOLLIN不會再觸發,按理說close之後是不會有EPOLLIN,但是多線程時,有可能有EPOLLIN排在close後邊 執行,那麼什麼時候才能確定epoll_wait中再也不會有事件到來?因為這時候才能乾淨的將socket
摘要: 遊戲開發中,經常會越到千奇百怪的Bug。背景程式都是以demon
看個例子,就可以看出原因 public static void Main(string[] args) { Console.WriteLine("進入For迴圈"); for(int i=0;i<List().Count;i++){ Console.WriteLine(i.ToString()); } Console.WriteLine("進入
對於buffer的設計,chaos和其他網路程式庫的做法稍有不同,就拿libevent-stable-1.4.13(以下所提到libevent處皆為該版本)來說,它採用一種能夠自動擴張的buffer,基本策略如下:1. 當緩衝區不夠存放新資料時,它會先在內部做marshal,看看是否能夠騰挪出足夠的空間2. 假如沒有滿足,那麼對buffer進行expand, 大小為原來的兩倍,擴張之後該buffer就不會縮小另外,libevent中有兩個buffer,input 和 output,
1. epoll 中使用et方式觸發,只需EPOLL_CTL_ADD一次,把EPOLLIN EPOLLOUT 事件全註冊,每個socket只需建立add一次,其事件就會 一直在epoll中,當然,socketclose 後應DEL掉。2. ET觸發方式是指當fd到狀態發生變化時通知,如read buffer從無到有,write buffer從滿到不滿才會通知。3.
長時間以來,一直針對Linux 伺服器開發背景程式,每天面對的是黑框框,輸出只有記錄檔。偶爾需要類比用戶端測試,要麼是寫幾行php代碼,在瀏覽器上點一點,要麼是寫個小Python指令碼在shell中執行一下。寫了一些測試用的小指令碼以後,越來越鐘愛這種指令碼測試方式了。想到什麼測試case,三下五除二改改指令碼就能測了。測試小指令碼多多少少也寫了十來個了。其實自己Php和Python的底子都不好,只是略懂一二,居然大部分問題都能google一下輕鬆解決,主要是也不需要使用神馬進階特性哈哈。
using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Diagnostics;using System.Xml.Serialization;using System.Xml;using System.Runtime.Serialization;using Emgu.CV.Structure;namespace
(譯)狀態機器的實現探討原文連結地址:http://drdobbs.com/cpp/184401236?pgno=1 實現一個狀態機器很容易,但是實現一個好的狀態機器卻不簡單。一般實現狀態機器的時候會有如下的實現代碼:switch (state_) caseA: do_A(); caseB: do_B();end switch
摘要: 在人工智慧中有一類問題是有確定解的,如路徑、五子棋等,這樣的問題非常適合使用搜尋來解決。 路徑搜尋是一個很有趣的問題,在人工智慧中算是很基礎的問題。最近一直在讀《Artificial Intelligence-A Modern Approach》,搜尋部分看完印象最深的就是A星演算法了,這個在遊戲開發中也最常用。於是乎做個總結,明天就掀過這篇了。路徑搜尋演算法:Dijkstra: Dijkstra
local print = printlocal debug = debuglocal string = stringlocal io = iolocal type = typelocal pairs = pairsmodule "dt"function bt() local dinfo = debug.getinfo(2) local func_line = dinfo.linedefined local filename = dinfo.short_src
Boost asio中有兩點用的不爽:1. asio中的所有對象都引用io_service2. async_write還要自己保證記憶體在completed之前有效 有空要把這兩點搞的更傻瓜一點,實際上在全非同步模式下NET IO分配兩個線程足矣,async搞一個隊列,completed時候刪掉,還可以通過writev最佳化寫, 現在在做的一個redrabbit lib就是在boost
文章目錄 1. lua中的user_t對象每個執行個體擁有兩個主要資料,2. C++ 封裝非同步呼叫Mysql的介面,註冊介面到LUA3. LUA 範例程式碼4. 注意事項: 1. Future模式:參見http://www.cnblogs.com/zhiranok/archive/2011/03/26/Future_Pattern.html使用future的好處是即利用了非同步並行能力,又保證主邏輯串列執行,保持簡單。2. Lua
在FFLIB的兩篇介紹中,已經介紹了FFLIB是基於Broker模式構建的架構,核心組件關係圖如下: http://www.cnblogs.com/zhiranok/archive/2012/07/30/fflib_framework.html http://www.cnblogs.com/zhiranok/archive/2012/08/08/fflib_tutorial.html 這種情況,比較明顯的瓶頸是Broker
文章目錄 2. Metatable3. 樣本class4. 實現繼承5. 注意 詳文請見 http://ffown.sinaapp.com/?p=111. LUA中的對象我們知道,對象由屬性和方法組成。LUA中最基本的結構是table,So 必須用table描述對象的屬性。lua中的function可以用來表示方法。那麼LUA中的類可以通過table +
簡介:熱門排行榜是遊戲組件中必不可少的組件,設計一個可重用的熱門排行榜是必不可少的,一個熱門排行榜系統需要滿足如下要求:熱門排行榜一般是限制名次的,比如只為前100 名進行排名熱門排行榜一般會有多種,比如等級熱門排行榜、金幣熱門排行榜等有時熱門排行榜需要定時更新,有時需要即時更新 排行系統組件關係圖: 建立熱門排行榜 rank_obj_mgr_t rank_obj_mgr; rank_system_t rank_system(&rank_obj_mgr);
寫了個指令碼, 用於調試伺服器訊息傳輸, 代碼如下:#!/bin/bashif [ $# -eq 0 ] ; thenecho "usage local_port dest_ip"exit 1fi/usr/sbin/tcpdump -lSAn -s 0 tcp port $1 and dst $2 |tee tcpdump.log# ./capture 22104 192.168.5.117# -i eth0 網卡 如果通訊訊息格式為json,抓包輸出非常的直接。 -s 0
在前邊http://www.cnblogs.com/zhiranok/archive/2011/12/12/boost_asio.html我提到,針對前面使用boost asio 中遇到的問題,對asio進行封裝,如下幾個目標:1.
使用FFLIB 構建了一個demo,該demo類比了一個常見的遊戲後台架構,該demo主要有一下亮點:FFLIB 實現處理序間通訊非常方便基於CQRS 思想構建LogicServer使用Event Publish/Subscribe, 實現各個模組的解耦合基於Event 實現實體物件的單元測試,在你gtest中,利用event做mock,同時利用event 做驗證,單元測試就是一個Given(event,先提供條件), When(Command,觸發操作),