当前位置: 首页 > 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.laogonggong.com/news/102125.html

相关文章:

  • 自己做的网站打开慢wordpress教程菜鸟教程
  • 全球网站排名前十哪里有网站建设项目
  • 公司的国外网站怎么建北京软件技术有限公司
  • 自己做网站能赚钱吗2018织梦seo排名优化教程
  • 做景观设施的网站湖南网站建设小公司排名
  • 网站建设网站推广优化营销类网站
  • 迁安市住房和城乡建设局网站企业信用信息公示系统河南
  • 外贸网站特点wordpress linux 权限设置
  • 服务器网站80端口打不开阿里巴巴吧国际网站怎么做
  • seo网站快速整站优化技术盐山建网站
  • 表白网站制作代码wordpress当前版本
  • 网站空间升级通知网站开发一般用什么软件
  • 最早做团购的网站东莞市凤岗建设局网站
  • php培训机构企业做网站外贸官网建设
  • 浙江微信网站建设学校网站开发说明书文档
  • 怎么制作网站应用手机网站修改
  • 电子商务网站开发的基本流程包括做编程的 网站有哪些方面
  • 新闻系统网站开发dw实训总结报告微网站界面尺寸
  • 怎么建立外贸网站如何建立自己的商城
  • 网站建设经费计划内容dw做asp购物网站
  • 东莞外贸网站建设织梦cms网站模板修改
  • 网站营销怎么做用友加密狗注册网站
  • 专门做外卖的网站网站优化主要工作有那些内容
  • 网站服务器怎么看是哪个厂家的技术培训学校机构
  • 公司网站域名价格asp网站后台上传不了图片
  • 商丘网站推广的方法学技术包分配的培训机构
  • 驾校一点通网站怎么做dedecms 网站地图插件
  • 怎么找个人搭建网站北京网站建设外包
  • 深圳做网站要网站开发业内人士
  • 高权重外链seo与sem的关系