当前位置: 首页 > news >正文

城市门户网站网站优化前景

城市门户网站,网站优化前景,酒店管理公司网站建设方案,多语言网站建设方案大家好#xff0c;这里是我以xghome这个用户名#xff0c;02年在CSDN上发布的《多线程安全的变量模板》#xff0c;这次在《0bug -- C/C商用工程之道》一书中#xff0c;作为“资源锁”和多线程通信核心示例#xff0c;也再次出现。这个模板我当初大约写了19遍#xff0c… 大家好这里是我以xghome这个用户名02年在CSDN上发布的《多线程安全的变量模板》这次在《0bug -- C/C商用工程之道》一书中作为“资源锁”和多线程通信核心示例也再次出现。 这个模板我当初大约写了19遍写的有点长了为了给广大读者省点事我就把它粘贴过来了。嗯原帖在这里http://blog.csdn.net/xghome/archive/2002/05/28/15469.aspx xghome是我2005年以前在CSDN使用的用户名不过可惜密码搞忘了最要命的是注册的21cn的邮箱也被废除搞得我只有以tonyxiaohome这个用户名重出江湖。不过还是应该夸一句CSDN对用户名和密码的保护真的没话讲呵呵我怎么也没有办法恢复原用户名了。 嗯这段代码是我的代码我叫肖舸拼音缩写XG那个时侯还没用Tony.Xiao的英文名呢。大家注意了哈可不是我欺世盗名盗贴别人的帖子哈。 嗯还有个旁证我的《0bug -- C/C商用工程之道》一书详细论述了我产生“资源锁”的原始动机和想法这个模板主要就是基于“资源锁”在开发这个思路目前我起码没有看到有其他人有过从思路传承性上我证明哈这个东东是我的。呵呵。 文中代码很简单大家只要把核心的模板代码拷贝下来放到一个xgvar.h的头文件里面就可以用当然也可以是你喜欢的其他名字啦。不过注意啊这个模板代码在Windwos下可以使用Linux下是不可以的请关注别用错了。 多线程的变量同步问题一直是困扰广大VC程序员的一大难题其主要表现是在多线程模式下线程间共享变量的存取不再安全程序员无法确保变量的值在存取时是否准确可信对此微软给出的解决方案是使用临界区对象加以保护。但是临界区对象使用太过于繁琐需要不断地加锁和解锁很容易搞忘引起新的Bug。 这里东楼给出多线程安全的变量模板由此模板可派生绝大多数变量类型实现线程间各种变量的安全互访。本模板已经重载了几乎全部运算符大家可以很方便地使用、――、、等操作方便编程使用。 #ifndef _XiaoGeMVarTempleteHasBeenDefined_ #define _XiaoGeMVarTempleteHasBeenDefined_ #include Afxmt.h template class MVAR_TYPE class MVAR { public: MVAR() { m_pBeginnew char[sizeof(MVAR_TYPE)]; memset(m_pBegin,0,sizeof(MVAR_TYPE)); } ~MVAR(){delete[] m_pBegin;} int GetLength(){return sizeof(MVAR_TYPE);} MVAR_TYPE Set(MVAR_TYPE value) { m_csLockHandle.Lock(); memcpy(m_pBegin,(char*)value,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return value; } MVAR_TYPE Get() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); myValuevalue; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator~() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue~myValue; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator(int) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator--(int) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue--; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator--() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue--; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValuevalue; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator-(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue-value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator*(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue*value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator/(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue/value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValuevalue; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator|(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue|value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator^(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue^value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValuevalue; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator-(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue-value; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator*(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue*value; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator/(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue/value; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValuevalue; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator|(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue|value; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator^(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue^value; memcpy(m_pBegin,(char*)myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } BOOL operator(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet(myValuevalue); m_csLockHandle.Unlock(); return bRet; } BOOL operator(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet(myValuevalue); m_csLockHandle.Unlock(); return bRet; } BOOL operator(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet(myValuevalue); m_csLockHandle.Unlock(); return bRet; } BOOL operator(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet(myValuevalue); m_csLockHandle.Unlock(); return bRet; } BOOL operator(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet(myValuevalue); m_csLockHandle.Unlock(); return bRet; } BOOL operator!(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet(myValue!value); m_csLockHandle.Unlock(); return bRet; } private: char* m_pBegin; CCriticalSection m_csLockHandle; }; typedef MVARchar              MCHAR; typedef MVARunsigned char       MUCHAR; typedef MVARshort             MSHORT; typedef MVARunsigned short    MUSHORT; typedef MVARint               MINT; typedef MVARunsigned int        MUINT; typedef MVARlong              MLONG; typedef MVARunsigned long       MULONG; typedef MVARfloat             MFLOAT; typedef MVARdouble            MDOUBLE; typedef MVARBOOL              MBOOL; typedef MVARLPVOID            MLPVOID; typedef MVARBYTE              MBYTE; #endif //_XiaoGeMVarTempleteHasBeenDefined_ 大家只需要把这段代码放入Mvar.h文件在stdafx.h中include这个头文件即可在程序中自由使用变量。以上仅仅是东楼根据自己的需要派生的几个常用类型大家也可以尝试派生新的类型使用。 注意当派生的变量需要取得其中的值时必须使用.Get()成员函数这是唯一一点不如普通变量方便的地方。 下面给出一个控制例子大家可以参考 #includen “mvar.h” class CMyClass { public: CMyClass(); ~ CMyClass(); protected: static UINT MyThread(LPVOID pParam);    //线程函数 MBOOL m_bThreadContinue;           //线程循环标志 MUINT m_nThreadCount;              //线程计数器 }; CMyClass::CMyClass() { m_bThreadContinueTRUE; m_nThreadCount0; int i; //开启100个线程 for(i0;i100;i) { m_nThreadCount;                //一定要在开启线程前累加线程计数器 AfxBeginThread(MyThread,this);    //开启线程以本对象指针为参数 } } CMyClass::~CMyClass() { m_bThreadContinueFALSE;  //通知线程关闭 while(m_nThreadCount!0) {}   //等待所有线程退出 //此时退出线程已经全部安全退出!!! } UINT CMyClass::MyThread(LPVOID pParam) { CMyClass* pThis(CMyClass*)pParam;    //得到本对象指针 while(pThis-m_bThreadContinue) { //循环体 Sleep(100); } pThis-m_nThreadCount --; //线程计数器减1 return 0; }  如果有问题欢迎大家提问如果有Bug,也请大家及时向东楼提出。 在线底价购买《0bug-C/C商用工程之道》直接点击下面链接或拷贝到浏览器地址栏http://s.click.taobao.com/t_3?pmm_13866629_0_0n23lhttp%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0肖舸 转载于:https://blog.51cto.com/tonyxiaohome/255366
http://wiki.neutronadmin.com/news/432656/

相关文章:

  • 网站设计文章小型企业网站有哪些
  • 创新的中小型网站建设保养车哪个网站做的好
  • 巫山网站设计做网站代理商好赚吗
  • 安阳企业网站优化排名建设网站建设工程信息泰州网1242低工程词
  • 网站建设误区云优客seo排名公司
  • 做网站付款方式邯郸市民网
  • 网站开发商问花店老板网站建设推广费用
  • 网站排名哪家好近期国际热点大事件
  • 3个典型网站建设公司制作代码
  • 专业模板建站价格建设部网站官网 造价鉴定
  • 蚌埠建设学校网站教育学校宁波seo教程推广平台
  • 做网站之前需要准备什么一个网站 多个域名
  • 临汾网站建设 吕梁网站建设短视频排名seo
  • 湘潭网站建设 多少钱磐石网络国家企业信用公示信息查询平台
  • 做网站的软件有哪些权威发布新闻的含义
  • 宿州高端网站建设公司哪家好那个网站卖数据库
  • 网站管理工作总结安宁网站建设 熊掌号
  • s什么网站可以接单做设计赚钱二手房中介网站建设
  • 网站建设公司管理流程邢台123最新消息
  • 网站虚拟主机行吗wordpress页面模板修改
  • 怎么做自己淘宝优惠券网站微商城怎么进入购买
  • wordpress邮件订阅网站优化公司谷歌优化
  • 红色网站主题网站内容管理系统cms
  • 长沙专业做网站较好的公司郑州网站制作网页
  • 推广网站优化怎么做免费文档模板素材网站
  • 凡科建站官网 网络服务共享虚拟主机做网站够用么
  • 沙田网站仿做设计吧 网站
  • flash网站片头动画wordpress照片加水印
  • 网站怎么做seo优化wordpress页面内导航
  • 做棋牌网站合法吗成都市网站制作