c++线程睡眠和时钟睡眠有什么区别?

std::this_thread::sleep_for(seconds(12));

SetTimer(1,1000,NULL);//定时器

阅读 1.9k
1 个回答

最主要的区别还是sleep_for是std(c++本身)提供的多平台通用的休眠函数,而SetTimer是windows的系统api。
与之类似的,还有windows下的Sleep(按秒休眠)和linux下的sleep(按毫秒休眠)这两个函数都是只有特定平台才能使用。

  • std::this_thread::sleep_for是C++11提供的函数,用于让当前线程睡眠一段时间,休眠期间不与其他线程竞争CPU,根据函数参数等待相应时间。而SetTimer是Windows API中的函数,用于设置一个定时器,当定时器到达指定时间后,会向指定窗口发送一个WM_TIMER消息,以便应用程序进行处理。
  • std::this_thread::sleep_for可以让当前线程睡眠一段时间,但是在此期间,当前线程并没有释放CPU资源,而是进入了睡眠状态,直到睡眠结束后才能再次使用CPU资源。而SetTimer则不会让线程进入睡眠状态,而是在等待定时器到达的过程中仍然可以使用CPU资源。
  • std::this_thread::sleep_for的精度取决于操作系统提供的时钟精度,通常为几毫秒或几微秒。而SetTimer的精度可以达到毫秒级别。
  • std::this_thread::sleep_for的使用方式是在当前线程中调用函数,而SetTimer需要指定一个窗口句柄和定时器ID,以便在定时器到达时向指定窗口发送消息。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题