一、LOGGER
二、Thread
三、Event
四、Date
五、Time
.h的代码
pragma once #include "cowutil/thread/thread.h" #include "cowutil/include/event.h" #include "string" using std::string; //cowutil thread class TestThread : public Thread{ public: TestThread(); ~TestThread(); protected: virtual void run(); private: }; class SubjectBase { public: virtual ~SubjectBase(){} public: virtual void update(int state) = 0; protected: Event<void (SubjectBase* sender,int state)> m_statechged; int m_currentState; private: }; class ObserverBase; class ConcreteSubjectA : public SubjectBase { public: virtual void update(int istate); void linkToOb(ObserverBase* ob); protected: private: }; class ObserverBase { public: virtual ~ObserverBase(){} virtual int subject_state_chg(SubjectBase* sender,int state)=0;//do sth while subject state chged; protected: private: }; class ObserverA : public ObserverBase { public: virtual int subject_state_chg(SubjectBase* sender,int state); protected: private: }; class ObserverB : public ObserverBase { public: virtual int subject_state_chg(SubjectBase* sender,int state); };
.cpp的代码
#include "test.h" #include "stdio.h" #include "cowutil/include/Logger.h" #include "cowutil/include/time.h" #include "cowutil/include/date.h" #include "cowutil/thread/Thread.h" #include "cowutil/include/SafeDelete.h" #include "cowutil/include/event.h" #include "boost/bind.hpp" #include "string" using std::string; void testBoostThread(); void testObserverPattern(); void testLogger(); int main(int argc,char* argv[]) { testLogger(); testBoostThread(); testObserverPattern(); return 0; } void testLogger() { Logger::getInstance()->setLogFileName(string("log.txt")); LOG_INFO("hi this is logger!"); } //线程函数 void TestThread::run() { Time tm; printf("hello this is my thread,try suspend 2 sec/n"); printf("%d:%d:%d - %s/n",tm.getHour(),tm.getMinute(),tm.getSecond(),tm.toString().c_str()); TestThread::msleep(2000); Time tm1; printf("my thread go on running!/n"); printf("%d:%d:%d - %s/n",tm1.getHour(),tm1.getMinute(),tm1.getSecond(),tm1.toString().c_str()); } TestThread::TestThread() { } TestThread::~TestThread() { } void testBoostThread() { Time tm; printf("%d:%d:%d - %s/n",tm.getHour(),tm.getMinute(),tm.getSecond(),tm.toString().c_str()); Date dt; printf("%d-%d-%d - %s/n",dt.getYear(),dt.getMonth(),dt.getDay(),dt.toString().c_str()); Thread* thd = new TestThread; // thd->start();//运行子线程 printf("this is MainThread!/n"); thd->join(); //主线程等待子线程结束 printf("sub thread exit!/n"); OWSAFE_DELETE(thd); } void testObserverPattern() { ConcreteSubjectA subject; ObserverA obA1,obA2; ObserverB obB1,obB2; subject.linkToOb(&obA1); subject.linkToOb(&obA2); subject.linkToOb(&obB1); subject.linkToOb(&obB2); subject.update(1); subject.update(2); subject.update(3); } void ConcreteSubjectA::linkToOb( ObserverBase* ob ) { m_statechged += boost::bind(&ObserverBase::subject_state_chg,ob,_1,_2); } void ConcreteSubjectA::update(int istate) { m_currentState = istate; m_statechged(this,istate); } int ObserverA::subject_state_chg( SubjectBase* sender,int state ) { printf("ObA catch the subject state changing %d!/n",state); return 0; } int ObserverB::subject_state_chg( SubjectBase* sender,int state ) { printf("ObB catch the subject state changing %d!/n",state); return 1; }
问题内容: 最近,我们被要求提供其中一个库的Linux版本,之前我们是在Linux下开发的,并已针对Windows发行,而在Windows上部署库通常要容易得多。我们遇到的问题是将导出的符号剥离为仅暴露界面中的符号。想要这样做的三个很好的理由 为了保护我们技术的专有方面,以免通过导出的符号被暴露。 防止用户遇到符号名称冲突的问题。 为了加快库的加载速度(至少有人告诉我)。 然后举一个简单的例子:
配置:11400:arm-linux-gnueabihf-gcc-o conftest-g-o2-i/home/user/rpi_dev/lib/include conftest.c-lz-lm>&5/home/user/rpi_dev/xtools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm
本文向大家介绍thinkphp下MySQL数据库读写分离代码剖析,包括了thinkphp下MySQL数据库读写分离代码剖析的使用技巧和注意事项,需要的朋友参考一下 当采用原生态的sql语句进行写入操作的时候,要用execute,读操作要用query。 MySQL数据主从同步还是要靠MySQL的机制来实现,所以这个时候MySQL主从同步的延迟问题是需要优化,延迟时间太长不仅影响业务,还影响用户体验。
本文向大家介绍请你来手写一下快排的代码相关面试题,主要包含被问及请你来手写一下快排的代码时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
我试图使用PDFBox从pdf文件中提取带有坐标的文本。 我混合了一些在互联网上找到的方法/信息(stackoverflow也是),但是我有坐标的问题似乎是不对的。例如,当我试图使用坐标在tex上画一个矩形时,矩形被画在了其他地方。 这是我的代码(请不要判断风格,写得很快只是为了测试) TextLine.java myStripper.java 单击AWT按钮上的事件 有什么建议吗?我做错了什么?
问题内容: 如何为Phone对象模拟对象。 波纹管 谢谢 问题答案: 首先,我要做一些假设。 与无副作用的影响。该是对你并不重要。 这样,您的课程就变成了: 因此,您的测试有两个条件。要么是“测试”,然后返回“完成”,要么不是,然后返回“失败”。 那么如何设置设置为“ ”。可以肯定的是,我们需要能够从测试中设置“名称”。为此,我们需要“注入”它(我们可以通过其他多种方式来实现它,但是我喜欢注入)。
本文向大家介绍如何把C++的源代码改写成C代码的方法,包括了如何把C++的源代码改写成C代码的方法的使用技巧和注意事项,需要的朋友参考一下 C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用C语言改写是很有必要的。 C++与C区别最大的就是C++中的类的概念和特性,将C++改为C的问题,就