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

模板网站建设流程网站优化排名方法

模板网站建设流程,网站优化排名方法,如何做好网站建设工作,html静态网页模板下载本文我们不用定时器。定时器会阻塞消息循环。先看需求: 我们先看第一种,有一个任务,要求每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.tj-hxxt.cn/news/53577.html

相关文章:

  • 建设中专网站泉州百度关键词排名
  • 做批发的网站是阿里百度指数电脑端查询
  • 永久免费的网站推荐站长之家关键词挖掘工具
  • 年前做招聘网站话术免费网站怎么做出来的
  • 天津网站建设培训课件头条今日头条新闻
  • 人脉做的最好的网站免费制作详情页的网站
  • 做网站和网页的目的和作用是什么百度seo教程视频
  • 阿里巴巴免费建网站国际新闻今天最新消息
  • 网站一直百度上搜不到是怎么回事啊百度官方营销推广平台
  • 江苏建筑工程信息网站saascrm国内免费pdf
  • 石家庄有学校交做网站和优化的吗网络关键词排名软件
  • 个人网站网站建设数字营销公司
  • 汕头网站制作推荐海淀区seo搜索引擎
  • 网络服务系统站长之家seo综合
  • 如何利用网站模板做网站无需下载直接进入的网站的代码
  • 如何把做的网站发布到网上婚恋网站排名
  • 网站设计团队介绍全网seo是什么意思
  • 网页都有哪些抖音seo是什么意思
  • 黑龙江省建设教育信息网站百度快速收录提交工具
  • 大连模板网站制作公司seo推广教程seo高级教程
  • 厦门网站设计一般要多久太原网站排名推广
  • 网站上线前测试搜索推广渠道有哪些
  • 教育部高等学校建设中心网站外贸全网营销推广
  • 网站制作的一般步骤短视频精准获客系统
  • 政务网站优化市场营销八大营销模式
  • 中恒建设集团有限公司 网站360应用商店
  • 基于云平台网站群建设上海网络营销上海网络推广
  • 黄骅做网站的电话杭州最好的seo公司
  • 做网站 买空间网络推广的细节
  • 表示商业网站的域名泉州seo按天计费