是的,我可以在Windows中使用Sleep()或在POSIX中使用pause(),然后继续.但是我如何只使用C++ 11睡觉?我认为有一种方法,即使用std :: this_thread加入调用线程,但std :: this_thread没有与pthread函数不同的join()方法.更不用说我们无法用C++ 11处理信号了,我知道如何永远迭代睡眠,如下所示:
while(true)
std::this_thread::sleep_for(std::chrono::seconds(1));
Run Code Online (Sandbox Code Playgroud)
但是,正如你所看到的,它根本不优雅.此代码仍然消耗CPU时间.调度程序必须关心此过程.我也可以使用条件变量或promise,但是它再次占用一些内存或者不能在某些操作系统上工作(它会抛出异常以避免死锁).
也许这可能相当于Windows的Sleep(INFINITE):
while(true)
std::this_thread::sleep_for(std::chrono::hours::max());
Run Code Online (Sandbox Code Playgroud)
但许多人说这不实用.
谁能想到出色的方式?
结构中的匿名结构中的Brace-or-equal-initializers不会对VS2013生成的输出执行任何操作.有代码:
#include <iostream>
#include <cstdint>
struct S
{
struct
{
uint64_t val = 0;
}anon;
};
int main()
{
S s;
S *a = new S;
std::cout << s.anon.val << std::endl;
std::cout << a->anon.val << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Linux上使用此命令编译:
g++ -std=c++11 def-init-anon-atruct.cpp -o def-init-anon-atruct
Run Code Online (Sandbox Code Playgroud)
(添加优化标志不会影响结果)
预期结果:
0
0
Run Code Online (Sandbox Code Playgroud)
奇怪的.使用VS2013运行它会产生垃圾值.在实施C++ 11标准方面,谁在这方面是正确的?我非常怀疑这是海湾合作委员会的错.
是否与一些无用的VS编译器选项有关?Windows扩展?由于MS制造的错误,我必须为结构制作默认构造函数?这很荒谬.
member-initialization c++11 anonymous-struct visual-c++-2013
我想出了将元素分离到弹出窗口的想法.使用弹出窗口window.open(),在该文档中设置一些元素并添加事件侦听器以用于原始目的,但作为弹出窗口组件.所有这些都有效,似乎创建的窗口由同一个线程处理.
这种"技术"是否容易出错?Ig:如果我在弹出窗口中创建一个画布并从中获取WebGL上下文,它是否能完美运行?如果我在那里设置了一堆事件监听器,我会毫不拖延地从它们那里获得回调吗?
我无法对这个进行研究,因为几乎没有人这样做.在我的生活中,我看到许多网站使用弹出窗口进行用户输入,但不是用于交互式或实时的东西.我正在构建一个复杂的Web应用程序,利用多个监视器将有益于用户体验.你知道,至少我知道拥有两台显示器并且无法同时使用它们是多么痛苦,因为应用程序的所有组件都在一个窗口中狭窄.想象一下使用Photoshop的MDI版本,其中所有工具箱都在MDI区域内,您无法将它们从应用程序窗口中取出.一个网页就是这样.