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

电商运营网站 建设企业百度推广怎么收费

电商运营网站 建设,企业百度推广怎么收费,免费做销售网站,网页前端技术有哪些本文我们不用定时器。定时器会阻塞消息循环。先看需求: 我们先看第一种,有一个任务,要求每1秒钟执行一次,最常见的写法如下两种 bool bExitThread false; DWORD WorkThread1(LPVOID param) {while (false bExitThread){//// to…

本文我们不用定时器。定时器会阻塞消息循环。先看需求:

我们先看第一种,有一个任务,要求每1秒钟执行一次,最常见的写法如下两种


bool bExitThread = false;
DWORD WorkThread1(LPVOID param)
{while (false == bExitThread){//// to-do 这里是执行任务的具体代码//Sleep(1000);}return 0;
}

或者如下:

HANDLE hEventExit = ::CreateEvent(NULL, FALSE, FALSE, _T("hEventExit"));DWORD WorkThread1(LPVOID param)
{while (false == bExitThread){DWORD nRet = ::WaitForSingleObject(hEventExit, 1000);if (WAIT_TIMEOUT != nRet){break;}////to-do 执行任务具体代码//}return 0;
}

勉强可以用了,但是有明显缺点,是当软件要退出时,必须等待该线程1秒钟,非常不实时。无法完成快速响应退出。很致命啊。

于是有了改进的写法,如下两种:


DWORD WorkThread2(LPVOID param)
{while (false == bExitThread){//// to-do 这里是具体代码//for (int i = 0; i < 100; i++){Sleep(10);if (bExitThread)break;}}return 0;
}

或者如下:

HANDLE hEventExit = ::CreateEvent(NULL, FALSE, FALSE, _T("hEventExit"));DWORD WorkThread1(LPVOID param)
{DWORD nCount = 0;while (false == bExitThread){DWORD nRet = ::WaitForSingleObject(hEventExit, 10);if (WAIT_TIMEOUT != nRet){break;}nCount++;if (0 == nCount % 100){////to-do 执行任务具体代码//}}return 0;
}

不得不说,这两种改进方式,的确做到了1秒钟执行1次任务,也能做到当软件退出时,能极快速的退出该线程。不得不说这种化整为零的好方式,比前面第一种好了许多,甚至你可以直接把睡眠或等待改成1毫秒,就可以达到更低时延的快速退出线程。

但是,假如需求做一下调整,但有多个任务,比如3个任务需要执行,而且,
任务1,必须保证每1秒钟要执行一次(耗时忽略不计)
任务2,必须保证每2秒钟要执行一次(耗时忽略不计)
任务3,必须保证每3秒钟要执行一次(耗时忽略不计)

(不准使用定时器N个定时器,定时器会导致一顿一顿的,也不准开N个定时器再在里面各开1个线程), 我们怎么做到保证N个任务,按如上要求执行,还要能保证退出时,线程能最快的退出。

事实上这才是我们现实需求中最最常见的。这个时候,同样也可以用化整为零的多次Sleep或WaitForSingleObject来完成。比如如下,巧用nCount计数来完成:


HANDLE hEventExit = ::CreateEvent(NULL, FALSE, FALSE, _T("hEventExit"));DWORD WorkThread3(LPVOID param)
{bool bSet = false;DWORD nCount = 0;while (false == bExitThread){DWORD nRet = ::WaitForSingleObject(hEventExit, 1);if (WAIT_TIMEOUT != nRet){break;}nCount++;if (0 == nCount % 1000){//// to-do Task1//}if (0 == nCount % 2000){//// to-do Task2//}if (0 == nCount % 3000){//// to-do Task3//}}return 0;
}

显然是达到了多个任务都可以按照指定的时间间隔频次执行,而且还能做到软件退出时,该线程也能快速的退出。

但假如需求再变一下,只准开一个线程,3个任务需求同上,但是每个任务执行耗时不可忽略,任务执行耗时1秒却不可中断。这个时候,我们如何做到软件退出时,最快的退出呢?

显然软件正好退出时,可能该线程刚好进入任务N执行,执行1秒耗时不可中断,必然需要等待。

显然这个时候需要做到快速优雅的退出,就比较困难了。如果实在不想等待1秒的话,我们可以直接PauseThread或TerminateThread,来暂停或打断该线程的执行,然后退出软件。这也不失是一种快速响应退出线程的好方法了。

虽然可以做到快速退出了,但是有一个需求是没有满足的,那就是:

  • 每隔1秒执行一次Task1;
  • 每隔2秒执行一次Task2;
  • 每隔3秒执行一次Task3;

为什么呢,因为这种方式有个弊端,当第2秒时,Task1执行耗时1秒,它占了1秒,导致了Task2往后延了1秒执行;当第3秒时,Task2,Task3依次又顺延了许多秒,并没有达到需求。所以这个时候只准开1个线程,就很难实时满足需求了。只能改成开3个线程单独去处理了。

搁笔。如有疑问,站内信联系

http://www.ds6.com.cn/news/98822.html

相关文章:

  • 做足球预测的网站seo网站关键词排名优化公司
  • 上海微信网站公司哪家好编程培训班学费一般多少钱
  • 南宁网站建设团队推广公司是做什么的
  • 谷歌网站的主要内容关键词查网址
  • 腾讯云网站备案如何快速提升自己
  • 平湖网站建设公司克电商运营助理
  • 网站开发+.net+开源桂林seo
  • 中牟高端网站建设网络营销案例及分析
  • 凡客诚品正品男宁波seo哪家好
  • 广州做公司网站的公司有哪些seo是指什么
  • 外贸公司网站建设费的会计科目合肥网站优化推广方案
  • 买网站空间需要知道的省委副书记
  • 广东哪家网站建设太原免费网站建站模板
  • 绵阳市做公司网站百度收录查询api
  • 莆田做外贸网站鄂州网站seo
  • 镇江网站设计建设百度排名优化软件
  • 韶关建网站seo搜索优化网站推广排名
  • web制作网页盒子搜索引擎优化seo方案
  • 泰安市建设信息网站做广告的怎么找客户
  • 邓亚萍做的网站重庆seo代理
  • 建委网站如何做水印合同策划推广活动方案
  • 用织梦做企业网站网站制作工具有哪些
  • 马鞍山做网站自己做的网址如何推广
  • 网站运营知识优化大师班级
  • web开发和做网站的区别网络营销推广方案策划书
  • 做财务需要关注哪些网站企业查询系统官网
  • 上海企业网站建设方案重庆百度关键词推广
  • table布局的网站中国网站建设公司前十名
  • 木马设计seo是什么专业
  • 贵阳网站建设哪家好方舟必应搜索引擎网站