- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我正在实现一个时钟,并且我想最小化每单位时间的唤醒次数。所以,我只想在整分钟被叫醒(当我需要更新显示时)。在 C(或 C++)中执行此操作(最好是可移植的)的最佳方法是什么?
最佳答案
C++03 和 C07 标准并没有真正提供任何可移植的方法来执行此操作。如果您不能依赖较新的编译器,那么几乎唯一合理的可移植选择可能是 POSIX 线程(下文会详细介绍)。
在 C++11 下,您可以创建一个线程,并使用 std::sleep_until
,或者(如果您愿意,出于某种原因)std::sleep_for
.更喜欢后者的一个原因是对 C 的可移植性。C1x 有一个 thrd_sleep
函数,它本质上类似于 std::sleep_for
,所以它可能更容易使用两者功能相同。
可移植性(在这种情况下)可能很难定义。这些函数在 C++ 标准和 C 草案中,但它们显然都是非常新的,因此很难猜测您关心的编译器是否实际实现了它们。同时,它们非常紧密地基于 pthreads,因此与大多数新的和不同的相比,它们已经(或即将)实现的可能性更大。
如果您愿意将自己限制在 C++ 中,您还可以考虑 Boost.thread .它与标准中的内容非常相似,但它已经适用于几乎所有主要编译器和平台。
如上所述,另一种可能性是直接使用 POSIX 线程。从理论上讲,它可能不那么便携(至少从长远来看),但实际上它现在可能至少是便携的——特别是,它可能可以移植到你真正关心的所有平台上,这是大多数真正重要的事情。显然,它们在基本上所有类 Unix 平台上都可用,而且还有一个 port to Win32。 .
我可能应该添加一个警告,我认为这是一个很小的警告:这些都不能真正保证在“准确时间”运行。它们几乎可以保证您的线程至少会按照您指定的时间休眠,但也可以更长——at
和 cron
也是如此。大多数典型的操作系统都不是“实时”的,因此基本上任何在准确时间运行的尝试都是没有希望的,除非您非常松散地定义“准确”。大多数人主要感兴趣的是距离足够近,以至于它看起来和用户看起来是正确的,所以任何比十分之一秒左右更准确的东西都是不必要的。在那种情况下,您通常可以做得很好(尽管如果系统负载真的很重,即使这样也可能成为问题)。
关于c++ - 在准确的时间运行代码,la crond/atd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837481/
如果我执行 ls -la,我会得到如下结果 total 16 drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . drwx------+ 23 rocks
有人可以向我解释为什么 MARS 将伪指令翻译成两条指令:lui 和 ori?是否存在仅翻译一条指令的情况? 最佳答案 这个简单的程序 .data msg: .asciiz
在 MIPS 中,la指令转换为 lui和 ori .然而,MARS Simulator 似乎根本没有这样做。当我转储以下机器代码时: .text la $a0, array la $
这是一个由两部分组成的问题,与在 Angular 中操作数据数组中的元素有关。从 ViewModel 中的数组中删除元素的方法似乎非常普遍: $scope.array.splice(index, 1)
我将不胜感激任何“一步一步”指南,说明如何更改 PHP/HTML 页面上的动态数据库连接/连接字符串/等上的代码,使其“即插即用”工作通过 ftp 将页面和 MySQL 数据库托管在“Azure 网站
我遇到了与此类似的问题 unanswered question 。我正在将代码提交到构建系统以使用其 g++ 二进制文件。但是,构建会移动到具有随机生成名称的临时路径(例如 /temp-build/1
我的问题类似于this question ,它询问如何将属性替换为字符串,例如 Transfer {0} from {1} to {2} on {3} 该问题的答案是 MessageFormat 类,
我正试图在 android 上复制我公司在外部开发的 iphone 应用程序。 我的需求很简单,但是在android下好像很难实现。我有三个数字编辑文本输入。每个都应该只采用十进制数值。所以数字 0-
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 这个问题似乎与 a specific programming problem, a software
在 PHP 中我可以这样做: print <<
我必须使用 C 重新实现 printf(3),而不使用任何可以为我进行转换的函数。 在我理解了 感谢各位 %a 的工作原理后,我以为我已经完成了:How %a conversion work in p
我想通过索引将元素添加到一个空列表中。例如,我想将 4 添加到列表 a 的第 5 位。 x = 4 a = [] 在 C++ 等其他语言中,我可以创建一个包含 10 个索引的数组,一开始都是空的,然后
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: When running ls -l, why does the filesize on a directo
在模块 warnings ( https://docs.python.org/3.5/library/warnings.html ) 中,可以发出警告,该警告似乎来自堆栈中较早的地方: warning
我是一名强类型语言支持者,但我正在从事一个大型 PHP 项目。 我一直在使用 PhpStorm,我喜欢您可以提供的额外类型提示,以及如下注释: /** @var \Payments $payment
我想知道它们是如何生成的,以及它们是否在我每次打开应用程序时生成或存储(缓存)。 这只是一个 Canvas (以编程方式)还是他们使用 XML?像这样,然后他们以编程方式添加字母:
我知道 .so 文件是一种动态库(许多线程可以共享这样的库,因此内存中不需要有多个副本)。但是 .a 和 .la 有什么区别呢?这些都是静态库吗? 如果动态库比静态库有很大的优势,为什么还有很多静态库
我必须将类似Wufoo的WYSIWYG表单生成器功能添加到Rails Webapp。 有谁知道会有所帮助的良好资源( gem /引擎/插件/示例代码)? 最佳答案 这并不是您所提问题的真正答案,但是很
向您学习 Haskell 提到的 difference lists (在该页面上搜索该术语),其中列表 l不直接表示,而是作为函数 (l++) .这允许更有效的左右连接。串联变成函数组合,最终可以通过
引用文献说la(加载地址)的伪代码被翻译为: Pseudo : la $1, Label lui $1, Label[31:16] ori $1,$1, label[15:0] 但是当我尝试在 M
我是一名优秀的程序员,十分优秀!