免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5593 | 回复: 10
打印 上一主题 下一主题

[其他] 这个 while (True) 用来做什么的, ? [复制链接]

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-26 15:22 |只看该作者 |正序浏览
void Thread (PVOID pvoid)
{
     double           A = 1.0 ;
     INT               i ;
     LONG             lTime ;
     volatile PPARAMS pparams ;
     
     pparams = (PPARAMS) pvoid ;
     
     while (TRUE)
     {
          WaitForSingleObject (pparams->hEvent, INFINITE) ;
         
          lTime = GetCurrentTime () ;
         
          for (i = 0 ; i < REP && pparams->bContinue ; i++)
               A = tan (atan (exp (log (sqrt (A * A))))) + 1.0 ;
         
          if (i == REP)
          {
               lTime = GetCurrentTime () - lTime ;
               PostMessage (pparams->hwnd, WM_CALC_DONE, 0, lTime) ;
          }
          else
               PostMessage (pparams->hwnd, WM_CALC_ABORTED, 0, 0) ;
     }
}

论坛徽章:
0
11 [报告]
发表于 2012-10-26 16:28 |只看该作者
回复 9# hellioncu


    hellioncu 好耐心~~~

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
10 [报告]
发表于 2012-10-26 16:26 |只看该作者
回复 9# hellioncu

谢谢,

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2012-10-26 16:23 |只看该作者
__BlueGuy__ 发表于 2012-10-26 16:15
回复 5# hellioncu


如果不循环,那么线程执行一次就结束了,一般来说用了线程不是只为了执行一次

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
8 [报告]
发表于 2012-10-26 16:15 |只看该作者
回复 5# hellioncu


为什么要有个 while (True)

论坛徽章:
0
7 [报告]
发表于 2012-10-26 15:57 |只看该作者
while(1)的这个用法,一般用于周期性执行某个任务的线程。

通过控制信号量的释放时间,可以控制这个线程的运行周期。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
6 [报告]
发表于 2012-10-26 15:51 |只看该作者
回复 4# star1983653


    while (TRUE) 意义是什么 ?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2012-10-26 15:48 |只看该作者
这个循环没有退出机制,只能强行干掉线程了

论坛徽章:
0
4 [报告]
发表于 2012-10-26 15:42 |只看该作者
不会死循环的.
通过调用WaitForSingleObject (pparams->hEvent, INFINITE) ;
线程需要一直等待直到获取到信号量,才能继续执行。
在等待的期间,操作系统会将线程挂起。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
3 [报告]
发表于 2012-10-26 15:38 |只看该作者
回复 2# star_in_sky

为什么要 while(True) ??  线程不是一直死循环的吗 ??
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP