系统级设计描述语言
语言架构
SystemC本质上是在C++的基础上添加的硬件扩展库和仿真核。
async
如果第一个参数是指向成员函数的指针,第二个参数则提供了用来应用该成员函数的对象(直接地,或通过指针,或封装在 std::ref
中),其余的参数则作为参数传递给该成员函数。否则,第二个及后续的参数将作为参数,传递给第一个参数是所指定的函数或可调用对象。和 std::thread
一样,如果参数是右值,则通过移动原来的参数来创建副本。这就允许使用只可移动的类型同时作为函数对象和参数。
C++提供了两个条件变量的实现:std::condition_variable
和 std::condition_variable_any
,这两个都在 <condition_variable>
库的头文件中声明。两者都需要和互斥元一起工作,前者仅限于 std::mutex
,后者可以与符合称为类似互斥元的最低标准的任何东西一起工作,因此跟普遍,所以会有大小、性能或者操作系统资源方面的形式的额外代价的可能。
官方教程:https://cn.vuejs.org/v2/guide/
1 | <!-- 开发环境版本,包含了有帮助的命令行警告 --> |
1 | var vue = new Vue({ |
1 | <div id="app"> |
从整体上看,所有线程之间共享数据的问题,都是修改数据导致的。在谈到并发时,术语竞争条件通常用来表示有问题的竞争条件,良性的竞争条件没什么意思。C++标准还定义了术语数据竞争,表示因单个对象的并发修改而产生的特定类型的竞争条件,造成可怕的未定义行为。
假设有用户存储DNS条目缓存的表,支持多线程读取,但在进行更新时独占访问数据结构,直到它完成了操作。使用 std::mutex
来保护数据结构会在其没有修改时消除并发读取数据结构的可能。这种新的互斥元通常称为读写互斥元,因为它考虑了两种不同的用法:由单个“写”线程独占访问或共享,有多个“读”线程并发访问。
对于更新操作,std::lock_guard<boost::shared_mutex>
和 std::unique_lock<boost::shared_mutex>
可用于锁定,以取代相应的 std::mutex
特化,这确保了独占访问。那些不需要更新数据结构的线程能够转而使用 boost::shared_lock<boost::shared_mutex>
来获得共享访问,这与 std::unique_lock
用起来是相同的,除了多个线程在同一时间、统一 boost::share_mutex
上可能会有共享锁。唯一的限制是,如果任一线程拥有一个共享锁,试图独占锁的线程会被阻塞,直到其他线程全都撤回它们的锁;同样的,如果任一线程具有独占锁,其他线程都不能获取共享锁或独占锁,直到第一个线程撤回了它的锁。
为避免死锁,常用的建议是始终使用相同的顺序锁定两个互斥元,但也有例外情况,如两个线程尝试通过交换参数而在相同的两个实例之间交换数据,将产生死锁。
幸运的是,C++标准库中的 std::lock
可以解决这一问题——std::lock
函数可以同时锁定两个或更多的互斥元,而没有死锁的风险。
因为 std::unique_lock
实例并没有拥有与其相关的互斥元,所以通过四处移动(moving)实例,互斥元的所有权可以在实例之间进行转移。在某些情况下这种转移是自动的,比如从函数中返回一个实例,而在其他情况下,你必须通过调用 std::move()
来显式实现。从根本上说,这取决于是否为左值(lvalue)——实变量或对实变量的引用——或者是右值(rvalue)——某种临时变量。如果源为右值,则所有权转移是自动的,而对于作者,所有权转移必须显式地完成,以避免从变量中意外地转移了所有权。std::unique_lock
就是可移动的(moveable)但不可复制(copyable)的类型的例子。
菜单—帮助—关于插件:Device Support 中关闭 Android 和 WinRT
实测关闭 Android 很有效果,WinRT效果感知不大。
另外,据说关闭 Welcome 插件可加快,但我觉得也作用不大。
在运行时选择线程数量:std::thread:hardware_currency()
,这个函数返回一个对于给定程序执行时能够真正并发运行的线程数量的指示,如果该信息不可用则函数会返回0。例如,在多核系统上它可能是CPU核心的数量。
1 | void f(int i, std::string const& s); |
在这种情况下,正是局部变量 buffer
的指针被传递给新线程,还有一个重要的时机,即函数 oops
会在缓冲在新线程上呗转换为 std::string
之前退出,从而导致未定义的行为。解决之道是在将缓冲传递给 std::thread
的构造函数之前转换为 std::string
。
1 | // 先转换,避免悬浮指针 |
在析构函数中将 joinable()
的线程 join()
目标效果:
弹窗弹出后,弹窗上的输入框获得焦点,以便不必再点击输入框就可以直接输入。
但在我通过一些方式为这个弹窗添加了背景遮罩后,发现输入框没有自动获得焦点了。
最终解决方法
激活弹窗。添加my_window->activateWindow()再setFocus()。
以PHPStudy为例,在Nginx的配置文件中,打开conf/vhosts/网站.conf
申请https证书(选免费的,付费证书死贵死贵的),在服务器软件中添加。
这里以腾讯云+phpstudy为例:
下载地址:https://nodejs.org/zh-cn/download/
为了稳定性,建议下载node 10.17.0版本。访问https://nodejs.org/en/download/ 进入Previous Releases。 找到v10.17.0版本的,下载完成后, 执行安装程序,根据引导完成安装即可。
QMake本身就提供了在pro下可判断平台的变量参数,如下:
1 | macx { |