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

企业模板之家seo搜索引擎招聘

企业模板之家,seo搜索引擎招聘,海淘网站是谁做的,wordpress被挂黑链试想一下, 有没有这种需求: 对于每一个新的对象, 我们希望它能够在一定时间后自动销毁, 前提是我们没有在这段时间内给它发出重置信号. 这种需求其实是有的, 比如在电影里, 主角知道了一个反派不希望被揭露的秘密, 同时需要保住自己的性命, 那么就可以构造这样一个对象, 如果24…

试想一下, 有没有这种需求:

对于每一个新的对象, 我们希望它能够在一定时间后自动销毁, 前提是我们没有在这段时间内给它发出重置信号.

这种需求其实是有的, 比如在电影里, 主角知道了一个反派不希望被揭露的秘密, 同时需要保住自己的性命, 那么就可以构造这样一个对象, 如果24小时内主角不给这个对象发送重置的信号, 它就会将这个秘密公之于众. 再比如, 在网络应用场景里, 我们希望每一个客户端能够定时给我们发送心跳包, 如果长时间不发送的话, 我们就剔除这个客户.

在之前的文章里, 我尝试使用了WIN32的Timer, 但是发现这种做法非常繁琐且容易出错, 你需要给每个对象绑定一个Timer, 同时需要在Timer到期时处理对象, 并且重置Timer的API和设置Timer的API是同一个, 稍有不慎就会搞砸.

现在, 我想出了一种相对简单的实现方式, 虽然精度不是非常理想, 但对于一般应用而言, 足矣.


 

我们构造一个类, 它有一些私有的数据, 这些可以自定义, 但有一些API是必须的:

class Client
{
private:// ...Data or something
    int32_t m_life;int32_t m_max_life;DWORD delete_thread_id;HANDLE count_thread_handle;
public:                            Client(int32_t, DWORD);void reset(void);static WIN32API DWORD countDownEntry(void *);DWORD countDown(void);// ...De-cons...
}

 

1. 构造函数:

Client:Client(int32_t life, DWORD thread_id)
{m_max_life = m_life = life;delete_thread_id = thread_id;count_thread_handle = CreateThread(..., ..., Client::countDownEntry, this);
}

第二个参数是用来销毁对象的线程ID, 这样设计是考虑到对象有可能保存在一个堆, 如果我们简单地调用析构函数, 那么对象本身所占据的空间就无法被释放了, 所以我们通知这么一个线程来完成所有的析构操作.

注意到我们使用的是countDownEntry()而不是countDown(), 因为CreateThread不接受一个非静态的成员函数作为函数入口(无法确认地址).

2. reset()方法, 这方法需要先挂起倒计时的线程, 主要是防止同时访问同一个内存的情况出现:

void Client::reset(void)
{
SuspendThread(count_thread_handle);m_life
= m_max_life;
ResumeThread(count_thread_handle); }

3. countDownEntry()方法为何是static的? 很简单, 我们需要在构造函数里使用它来初始化倒计时线程, 而它的实现非常简单, 我们在构造函数里把this指针传递给这个静态方法, 并在静态方法里重新获取这个this代表的对象, 调用这个对象的倒计时函数即可:

static WIN32API DWORD Client::countDownEntry(void *pM)
{Client *c = (Client *) pM;return c->countDown();
}

4. 而countDown()方法更加简单, 使用Sleep函数来计时即可, 每计一秒就将life减1:

DWORD Client::countDown()
{while (m_life > 0){Sleep(1000);m_life--;}PostThreadMessageA(delete_thread_id);return 0;
}

以上就是这样一个对象的设计思路, 原理比较简单, 也只是写了个大概, 同时需要windows.h的支持.

 

转载于:https://www.cnblogs.com/lancelod/p/4245769.html

http://www.lbrq.cn/news/2786905.html

相关文章:

  • 东莞企业模板建站百度手机助手网页版
  • 什么是网站的二级目录下站长工具四叶草
  • 做振动盘的企业网站jsurl转码
  • 网站建设定价百度营销推广
  • 白色网站源码天津百度推广电话号码
  • 金山专业做网站推广软文
  • 网站建设实训心得及收获公司建官网要多少钱
  • 什么网站做企业邮箱服务网站友情链接出售
  • 农副产品销售网站开发小学生简短小新闻十条
  • 杭州网站建设网络公司seo搜索引擎优化人才
  • eclipse与jsp网站开发seo店铺描述
  • 国内虚拟助手网站成都关键词优化平台
  • 网站制作需要哪些东西外链交易平台
  • 做网站还是网页设计网络推广员工资多少钱
  • 做网站全自动cpa引流天津优化代理
  • 网站建设分金手指排名一软文营销方法有哪些
  • 网站在线压缩淘宝关键词排名是怎么做的
  • 外国人做的甲骨文网站网站快速优化排名官网
  • 连云港外贸网站建设关键词代做排名推广
  • 设计师用的素材网站优化设计答案
  • 武汉今天最新消息湖南seo博客seo交流
  • 网站通常用什么编程做搜索推广是什么意思
  • 最早的c2c网站seo课程培训
  • 一个成功的网站要具备哪些方面b2b有哪些电商平台
  • 公司设计网站多少钱企业排名优化公司
  • 网赌代理武汉seo推广优化公司
  • 京东网站设计分析站长seo
  • 网站建设路由器怎么设置北京优化seo
  • 阿里巴巴武汉网站建设关键字排名优化公司
  • 网站备案有什么用2021友情链接qq群
  • 一种数字相机中的自动曝光算法
  • electron进程间通信-从主进程到渲染器进程
  • mysql-8.0.37-linux-glibc2.12-x86_64安装
  • AI 药物发现:化学分子到机器学习数值特征的转化——打通“化学空间”与“模型空间”关键路径
  • 20250819 强连通分量,边双总结
  • 【AI】算法环境-显卡、GPU、Cuda、NVCC和cuDNN的区别与联系