锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浠ヤ笅鏄竴閮ㄥ垎鍦╝sync_receive()鐨刪andler澶勬崟鑾峰埌鐨勬瘮杈冩湁鐢ㄧ殑閿欒鐮?br />
鍙槸涓浜涙祬闄嬬殑嫻嬭瘯錛岀洰鍓嶈寰楁湁鐢ㄧ殑涔熷氨鏄繖鍑犱釜錛屼笉姝g‘鐨勫湴鏂硅閫佹垜楦¤泲銆?img src ="http://m.shnenglu.com/shanoa/aggbug/145840.html" width = "1" height = "1" />
閿欒鐮侊紙鍗佽繘鍒訛級
鏋氫婦
鍙戠幇鍘熷洜
10009
boost::asio::error::bad_descriptor
鍦ㄤ竴涓凡緇忓叧闂簡鐨勫鎺ュ瓧涓婃墽琛宎sync_receive()
995
boost::asio::error::operation_aborted
姝e湪async_receive()寮傛浠誨姟絳夊緟鏃訛紝鏈鍏抽棴濂楁帴瀛?/td>
10054
boost::asio::error::connection_reset
姝e湪async_receive()寮傛浠誨姟絳夊緟鏃訛紝榪滅鐨凾CP鍗忚灞傚彂閫丷ESET緇堟閾炬帴錛屾毚鍔涘叧闂鎺ュ瓧銆傚父甯稿彂鐢熶簬榪滅榪涚▼寮哄埗鍏抽棴鏃訛紝鎿嶄綔緋葷粺閲婃斁濂楁帴瀛楄祫婧愩?/td>
2
boost::asio::error::eof
姝e湪async_receive()寮傛浠誨姟絳夊緟鏃訛紝榪滅鍏抽棴濂楁帴瀛楋紝榪欓噷璺?0054鍙戠敓鐨勬儏鍐典技涔庝竴鏍鳳紝浣嗘槸瀹為檯涓婂簲璇ユ槸鏈夊尯鍒殑錛屽叿浣撶椹尯鍒紝鐢卞洖澶嶄腑jack鐨勮娉曪紝榪欎釜鏄繙绔甯稿叧闂鎺ュ瓧銆?/td>
]]>
浜庢槸鍙堟槸涓涓嬪崍+鍗婁釜鏅氫笂鐨勮皟璇曟椂闂?.....
浠g爜涓殑鎰忔濆氨鏄皢鍐欏叆鐨勬暟鎹愬瓧鑺傜殑鍔?錛屽茍淇濆瓨鍦ㄥ唴瀛樼紦鍐查噷錛岀劧鍚庡張浠庡唴瀛樼紦鍐蹭腑璇誨嚭錛岄愬瓧鑺傚噺1錛屽茍杈撳嚭鍒版帶鍒跺彴錛屼竴濂楃粡榪囪繃婊ょ殑璇誨啓嫻佷究瀹屾垚浜嗐傜敱浜庝嬌鐢ㄤ簡妯℃澘鍏冪殑list浣滀負閾炬帴錛屽湪release妯″紡涓嬫墍鏈夌殑榪囨護鍣ㄦ搷浣滈兘鏄唴鑱旂殑錛岃繖铏界劧涔熸槸鎴戦鎯崇殑鏁堟灉錛屼絾鐪嬪畬姹囩紪鐮佷箣鍚庯紝鐫瀹炶鎴戦珮鍏翠簡涓鏅氫笂錛岃繖縐嶆垚灝辨劅鐪熺殑鏄痯rogramer鏈澶х殑涔愯叮銆?/p>
闇瑕佽鏄庣殑鏄細浠g爜涓殑mpl::list2鏄嚜宸卞疄鐜扮殑妯℃澘鍏冮摼琛?..榪囨鏃墮棿鑰冭檻鐮旂┒涓涓媌oost鐨勫茍鏇挎崲榪囨潵錛屽洜涓洪偅涓猯ist鍚庨潰鐨?璁╂垜瑙夊緱寰堜笉澶熸櫤鑳?..褰撶劧錛屽鏋渂oost鐨刲ist瀹炵幇榪囦簬澶嶆潅錛屾垨鏄笉鑳借鎴戠殑浠g爜瀹屽叏鍐呰仈鍖栫殑璇濓紝鑲畾涓嶄細鑰冭檻浣跨敤銆?br>
瀹屾垚榪欎釜涔嬪悗錛屾垜渚垮噯澶囩潃鎵嬫瀯寤篶ge欏圭洰錛屾墍璋撶殑cge錛屽氨鏄痗loud game engine鐨勭緝鍐?..欏懼悕鎬濅箟灝辨槸浣跨敤浜嗕簯鎶鏈殑娓告垙寮曟搸錛屾垜鎯沖湪涓氫綑鏃墮棿灝濊瘯涓浜涢瑕嗕紶緇焎s鏋舵瀯鐨勫湪綰挎父鎴忓紩鎿庢灦鏋勮璁★紝鍏蜂綋闅劇偣浼拌浼氭湁2涓細
1銆佽繍鐢╣pgpu group鐨勫茍琛岃繍綆楁妧鏈紝鑰冭檻浣跨敤鐩墠甯傚満鍗犵敤鐜囨渶澶х殑nvidia tesla鏈嶅姟鍣ㄩ厤鍚坈uda錛屽湪鏈嶅姟鍣ㄧ敤physX瀹炵幇涓瀹氱殑鐗╃悊妯℃嫙銆?br>2銆佸湪鍗蟲椂鎬ц緝寮虹殑鍦ㄧ嚎娓告垙涓紝ping鍊間竴鐩存槸鏈澶х殑鎸戞垬錛屾墍浠ユ湁閫夋嫨鎬х殑浣跨敤浜戣綆楁妧鏈紝榪欐槸鏋舵瀯璁捐涓婄殑鎸戞垬銆?br>鍏充簬cge鐨勮璁℃濊冨拰瑙勫垝錛屼細鍙﹀寮璐村叿浣撻槓榪幫紝騫惰褰曞紑鍙戣繘搴﹀拰鎯呭喌銆?/span>
std::map<std::string, Value> keyValue; // 鍦ㄥ嚱鏁板唴閮ㄥ垎閰嶇殑鍫嗘爤瀵硅薄錛堝眬閮ㄥ彉閲忥級
ReadData(keyValue);// 浠巇ll涓鍑虹殑鍑芥暟
keyValue.clear(); // delete涓嚭鐜癮ssert寮傚父
try
{
moeutil::simple_pool spool(32);
void* p1 = spool.malloc(15);
void* p2 = spool.malloc(10, 2);
void* p3 = spool.malloc(15, 4);
void* p4 = spool.malloc(7);
void* p5 = spool.malloc(7);
void* p6 = spool.malloc(70);
//std::cout<<p1<<'\n'<<p2<<'\n'<<p3<<'\n'<<p4<<'\n'<<p5<<'\n'<<p6<<std::endl;
spool.free(p1);
spool.free(reinterpret_cast<char*>(p2)+2);
spool.free(p3);
spool.free(p4);
spool.free(p5);
spool.free(p6);

}catch (moeutil::Exception& e)
{
std::cout<<e.what()<<std::endl;
}
// 鍔犺澆闈欐佸簱
#pragma comment(lib, "璺緞+LIB搴撳悕")
// 紱佹1221鍙瘋鍛?/span>
#pragma warning(disable: 1221)
// 瀵煎叆騫跺姞杞紻LL exe涔嬬被鐨勪簩榪涘埗鍔ㄦ佸簱
#import "璺緞+浜岃繘鍒跺簱鍚?/span>"
// 灝咰lassName綾諱腑鐨剆_Data闈欐佹垚鍛樺彉閲忓畾涔夊湪澶存枃浠朵腑鏃墮槻姝㈤噸瀹氫箟
__declspec(selectany) int ClassName::s_Data = 0;
// 褰撶敤鎴蜂嬌鐢╲oid func()鍑芥暟鏃訛紝緙栬瘧鍣ㄥ皢浣滃嚭璀﹀憡錛屽茍鏄劇ず“涓嶆帹鑽愪嬌鐢ㄨ鍑芥暟”瀛楁牱
__declspec(deprecated("涓嶆帹鑽愪嬌鐢ㄨ鍑芥暟")) void func();
// The type of the platform-specific implementation.
#if defined(BOOST_ASIO_HAS_IOCP)
typedef detail::win_iocp_io_service impl_type;
friend class detail::win_iocp_overlapped_ptr;
#elif defined(BOOST_ASIO_HAS_EPOLL)
typedef detail::task_io_service<detail::epoll_reactor<false> > impl_type;
#elif defined(BOOST_ASIO_HAS_KQUEUE)
typedef detail::task_io_service<detail::kqueue_reactor<false> > impl_type;
#elif defined(BOOST_ASIO_HAS_DEV_POLL)
typedef detail::task_io_service<detail::dev_poll_reactor<false> > impl_type;
#else
typedef detail::task_io_service<detail::select_reactor<false> > impl_type;
#endif
void ServerFramework::run()

{
boost::thread_group workers;
for (uint32 i = 0; i < mWorkerCount; ++i)
workers.create_thread(
boost::bind(&boost::asio::io_service::run, &mIoService));
workers.join_all();
}
void ServerFramework::open(const String& address, const String& port, uint32 nWorkers /**//*= DEFAULT_WORKER_COUNT*/)

{
// Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
boost::asio::ip::tcp::resolver resolver(mIoService);
boost::asio::ip::tcp::resolver::query query(address, port);
boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
mAcceptor.open(endpoint.protocol());
mAcceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
mAcceptor.bind(endpoint);
mAcceptor.listen();
mNextConnection = new Connection(this);
mAcceptor.async_accept(mNextConnection->getSocket(),
boost::bind(&ServerFramework::__onConnect, this,
boost::asio::placeholders::error));
mWorkerCount = nWorkers;
if (mWorkerCount == DEFAULT_WORKER_COUNT)
{
mWorkerCount = 4;
}
}
void ServerFramework::__onConnect(const BoostSysErr& e)

{
if (e)
{
MOELOG_DETAIL_WARN(e.message().c_str());
}
Connection* p = mNextConnection;
mNextConnection = new Connection(this);
// 鍐嶆榪涘叆鐩戝惉鐘舵?/span>
mAcceptor.async_accept(mNextConnection->getSocket(),
boost::bind(&ServerFramework::__onConnect, this,
boost::asio::placeholders::error));
// 澶勭悊褰撳墠閾炬帴
__addConnection(p);
p->start();
}
// 鐢ㄤ簬綰跨▼姹犲紓姝ュ鐞嗙殑鏍稿績瀵硅薄
boost::asio::io_service mIoService;
// 緗戠粶閾炬帴鐨勬帴鏀跺櫒錛岀敤浜庢帴鏀惰姹傝繘鍏ョ殑閾炬帴
boost::asio::ip::tcp::acceptor mAcceptor;
// 鎸囧悜涓嬩竴涓皢瑕佽浣跨敤鐨勯摼鎺ュ璞?/span>
Connection* mNextConnection;
// 瀛樺偍鏈嶅姟鍣ㄩ摼鎺ュ璞$殑瀹瑰櫒
ConnectionSet mConnections;

/**///// 涓洪摼鎺ュ璞″鍣ㄥ噯澶囩殑strand錛岄槻姝㈠茍琛岃皟鐢╩Connections
//boost::asio::io_service::strand mStrand_mConnections;
// 涓洪摼鎺ュ璞″鍣ㄥ噯澶囩殑鍚屾閿侊紝闃叉騫惰璋冪敤mConnections
boost::mutex mMutex4ConnSet;
// 涓烘帶鍒跺彴杈撳嚭嫻佸噯澶囩殑strand錛岄槻姝㈠茍琛岃皟鐢╯td::cout
AsioService::strand mStrand_ConsoleIostream;
// 宸ヤ綔綰跨▼鐨勬暟閲?/span>
uint32 mWorkerCount;
class A

{
public:
void func();
};

A a;
A& r = a;
boost::bind(&A::func, a);
boost::bind(&a::func, &a);
boost::bind(&a::func, r);
class InputDevice
: public EventSource
, public Singleton<InputDevice>

{
public:
};
class TestUI
: public Singleton<TestUI>

{
public:
~TestUI()
{
std::cout<<"~TestUI"<<std::endl;
}
void processKeyboard(EventArgs& args)
{
std::cout<<"閿洏鍝嶅簲"<<std::endl;
}

void processMouse(EventArgs& args)
{
std::cout<<"榧犳爣鍝嶅簲"<<std::endl;
}
};

int _tmain(int argc, _TCHAR* argv[])

{
new FrameUpdaterManager;
new DelayEventSender;
new InputDevice;
new TestUI;
InputDevice::getSingleton().mEventSet.addEvent("KeyDown", Event());
InputDevice::getSingleton().mEventSet.addEvent("KeyUp", Event());
InputDevice::getSingleton().mEventSet.addEvent("MouseLDown", Event());
InputDevice::getSingleton().mEventSet.addEvent("MouseLUp", Event());
InputDevice::getSingleton().mEventSet.addEvent("MouseRDown", Event());
InputDevice::getSingleton().mEventSet.addEvent("MouseRUp", Event());

//TestUI& ui = TestUI::getSingleton(); // 鐢ㄦ琛屼究浼氬嚭閿?/span>
TestUI* ui = TestUI::getSingletonPtr();
// 鍑洪敊寮濮?/span>
InputDevice::getSingleton().mEventSet["KeyDown"] += boost::bind(&TestUI::processKeyboard, ui, _1);
InputDevice::getSingleton().mEventSet["KeyUp"] += boost::bind(&TestUI::processKeyboard, ui, _1);
InputDevice::getSingleton().mEventSet["MouseLDown"] += boost::bind(&TestUI::processMouse, ui, _1);
InputDevice::getSingleton().mEventSet["MouseLUp"] += boost::bind(&TestUI::processMouse, ui, _1);
InputDevice::getSingleton().mEventSet["MouseRDown"] += boost::bind(&TestUI::processMouse, ui, _1);
InputDevice::getSingleton().mEventSet["MouseRUp"] += boost::bind(&TestUI::processMouse, ui, _1);

delete TestUI::getSingletonPtr();
delete InputDevice::getSingletonPtr();
delete DelayEventSender::getSingletonPtr();
delete FrameUpdaterManager::getSingletonPtr();
return 0;
}
#include <log4cxx/logger.h>
#include <log4cxx/logstring.h>
#include <log4cxx/propertyconfigurator.h>
int _tmain(int argc, _TCHAR* argv[])

{
using namespace log4cxx;
// 璇誨彇閰嶇疆鏂囦歡
PropertyConfigurator::configure("log4cxx.cfg");
// 寤虹珛涓や釜logger
LoggerPtr logger1 = Logger::getLogger("TraceYourMama");
LoggerPtr logger2 = Logger::getLogger("Patch");
LOG4CXX_TRACE(logger1, "璺熻釜");
LOG4CXX_WARN(logger1, "璀﹀憡");
LOG4CXX_DEBUG(logger1, "璋冭瘯");
LOG4CXX_ASSERT(logger1, false, "鏂█");
LOG4CXX_FATAL(logger1, "鑷村懡");
LOG4CXX_TRACE(logger2, "璺熻釜");
LOG4CXX_ERROR(logger2, "閿欒");
return 0;
}
# 璁劇疆root logger涓篋EBUG綰у埆
#log4j.rootLogger=TRACE,ca
log4j.logger.TraceYourMama=ERROR,fa,ha
log4j.logger.Patch=Trace,ca
#璁劇疆spirit涓篢RACE綰у埆
#log4j.spirit=DEBUG
#log4j.additivity.spirit=false

# %m - message
# %n - 鍥炶濺
# %d - 鏃墮棿
# %.16c - Logger鍚嶇О
# %-5p - log綰у埆
# %t - thread_id


#瀵笰ppender ca榪涜璁劇疆錛?br>
#榪欐槸涓涓帶鍒跺彴綾誨瀷鐨凙ppender
#杈撳嚭鏍煎紡錛坙ayout錛変負PatternLayout
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %-5p %.16c - %m%n




#瀵笰ppender fa榪涜璁劇疆錛?br>
# 榪欐槸涓涓枃浠剁被鍨嬬殑Appender錛?br>
# 鍏惰緭鍑烘枃浠訛紙File錛変負./debug.log錛?br>
# 杈撳嚭鏂瑰紡錛圓ppend錛変負瑕嗙洊鏂瑰紡錛?br>
# 杈撳嚭鏍煎紡錛坙ayout錛変負PatternLayout
log4j.appender.fa=org.apache.log4j.FileAppender
log4j.appender.fa.File=./debug.log
log4j.appender.fa.Append=true
log4j.appender.fa.layout=org.apache.log4j.PatternLayout
#log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c %x - %m%n
log4j.appender.fa.layout.ConversionPattern=%d %-5p %.16c - %m%n


#include <iostream>

template<typename Ty>
class Division

{
public:
Division(Ty dividend, Ty divisor)
:mDividend(dividend), mDivisor(divisor)
{}
public:
void show()
{
std::cout<<"緇撴灉 = "<<mDividend/mDivisor<<std::endl;
}
Ty mDividend, mDivisor;
};
template<>
inline void Division<int>::show()

{
std::cout<<"緇撴灉 = "<<mDividend/mDivisor<<std::endl;
std::cout<<"浣欐暟 = "<<mDividend%mDivisor<<std::endl;
}



int _tmain(int argc, _TCHAR* argv[])

{
Division<int> a(20, 11);
a.show();
Division<float> b(20.0f, 11.0f);
b.show();
return 0;
}

