成员函数指针与高性能的C++委托(下篇)

Member Function Pointers and the Fastest Possible C++ Delegates

撰文:

Don Clugston

翻译:周翔

(接中篇)

委托(delegate

和成员函数指针不同,你不难发现委托的用处。最重要的,使用委托可以很容易地实现一个

Subject/Observer设计模式的改进版[GoF, p. 293]Observer(观察者)模式显然在GUI中有很多的应用,但我发现它对应用程序核心的设计也有很大的作用。委托也可用来实现策略(Strategy[GoF, p. 315]和状态(State[GoF, p. 305]模式。

现在,我来说明一个事实,委托和成员函数指针相比并不仅仅是好用,而且比成员函数指针简单得多!既然所有的

.NET语言都实现了委托,你可能会猜想如此高层的概念在汇编代码中并不好实现。但事实并不是这样:委托的实现确实是一个底层的概念,而且就像普通的函数调用一样简单(并且很高效)。一个C++委托只需要包含一个this指针和一个简单的函数指针就够了。当你建立一个委托时,你提供这个委托一个this指针,并向它指明需要调用哪一个函数。编译器可以在建立委托时计算出调整this指针需要的偏移量。这样在使用委托的时候,编译器就什么事情都不用做了。这一点更好的是,编译器可以在编译时就可以完成全部这些工作,这样的话,委托的处理对编译器来说可以说是微不足道的工作了。在x86系统下将委托处理成的汇编代码就应该是这么简单:

mov ecx, [this]

call [pfunc]

但是,在标准

C++中却不能生成如此高效的代码。 Borland为了解决委托的问题在它的C++编译器中加入了一个新的关键字(__closure,用来通过简洁的语法生成优化的代码。GNU编译器也对语言进行了扩展,但和Borland的编译器不兼容。如果你使用了这两种语言扩展中的一种,你就会限制自己只使用一个厂家的编译器。而如果你仍然遵循标准C++的规则,你仍然可以实现委托,但实现的委托就不会是那么高效了。

有趣的是,

C#和其他.NET语言中,执行一个委托的时间要比一个函数调用慢8倍(参见http://msdn.microsoft.com/library/en-us/dndotnet/html/fastmanagedcode.asp)。我猜测这可能是垃圾收集和.NET安全检查的需要。最近,微软将“统一事件模型(unified event model)”加入到Visual C++中,随着这个模型的加入,增加了__event __raise__hook__unhookevent_sourceevent_receiver等一些关键字。坦白地说,我对加入的这些特性很反感,因为这是完全不符合标准的,这些语法是丑陋的,因为它们使这种C++不像C++,并且会生成一堆执行效率极低的代码。

解决这个问题的推动力:对高效委托(

fast delegate)的迫切需求

使用标准

C++实现委托有一个过度臃肿的症状。大多数的实现方法使用的是同一种思路。这些方法的基本观点是将成员函数指针看成委托��但这样的指针只能被一个单独的类使用。为了避免这种局限,你需要间接地使用另一种思路:你可以使用模版为每一个类建立一个“成员函数调用器(member function invoker)”。委托包含了this指针和一个指向调用器(invoker)的指针,并且需要在堆上为成员函数调用器分配空间。

对于这种方案已经有很多种实现,包括在

CodeProject上的实现方案。各种实现在复杂性上、语法(比如,有的和C#的语法很接近)上、一般性上有所不同。最具权威的一个实现是boost::function。最近,它已经被采用作为下一个发布的C++标准版本中的一部分[Sutter1]。希望它能够被广泛地使用。

就像传统的委托实现方法一样,我同样发觉这种方法并不十分另人满意。虽然它提供了大家所期望的功能,但是会混淆一个潜在的问题:人们缺乏对一个语言的底层的构造。

“成员函数调用器”的代码对几乎所有的类都是一样的,在所有平台上都出现这种情况是令人沮丧的。毕竟,堆被用上了。但在一些应用场合下,这种新的方法仍然无法被接受。

我做的一个项目是离散事件模拟器,它的核心是一个事件调度程序,用来调用被模拟的对象的成员函数。大多数成员函数非常简单:它们只改变对象的内部状态,有时在事件队列(

event queue)中添加将来要发生的事件,在这种情况下最适合使用委托。但是,每一个委托只被调用(invoked)一次。一开始,我使用了boost::function,但我发现程序运行时,给委托所分配的内存空间占用了整个程序空间的三分之一还要多!“我要真正的委托!”我在内心呼喊着,“真正的委托只需要仅仅两行汇编指令啊!”

我并不能总是能够得到我想要的,但后来我很幸运。我在这儿展示的代码(代码下载链接见译者注)几乎在所有编译环境中都产生了优化的汇编代码。最重要的是,调用一个含有单个目标的委托(

single-target delegate)的速度几乎同调用一个普通函数一样快。实现这样的代码并没有用到什么高深的东西,唯一的遗憾就是,为了实现目标,我的代码和标准C++的规则有些偏离。我使用了一些有关成员函数指针的未公开知识才使它能够这样工作。如果你很细心,而且不在意在少数情况下的一些编译器相关(compiler-specific)的代码,那么高性能的委托机制在任何C++编译器下都是可行的。

诀窍:将任何类型的成员函数指针转化为一个标准的形式

我的代码的核心是一个能够将任何类的指针和任何成员函数指针分别转换为一个通用类的指针和一个通用成员函数的指针的类。由于

C++没有“通用成员函数(generic member function)”的类型,所以我把所有类型的成员函数都转化为一个在代码中未定义的CGenericClass类的成员函数。

大多数编译器对所有的成员函数指针平等地对待,不管他们属于哪个类。所以对这些编译器来说,可以使用

reinterpret_cast将一个特定的成员函数指针转化为一个通用成员函数指针。事实上,假如编译器不可以,那么这个编译器是不符合标准的。对于一些接近标准(almost-compliant)的编译器,比如Digital Mars,成员函数指针的reinterpret_cast转换一般会涉及到一些额外的特殊代码,当进行转化的成员函数的类之间没有任何关联时,编译器会出错。对这些编译器,我们使用一个名为horrible_cast的内联函数(在函数中使用了一个union来避免C++的类型检查)。使用这种方法看来是不可避免的��boost::function也用到了这种方法。

对于其他的一些编译器(如

Visual C++, Intel C++Borland C++),我们必须将多重(multiple-)继承和虚拟(virtual-)继承类的成员函数指针转化为单一(single-)继承类的函数指针。为了实现这个目的,我巧妙地使用了模板并利用了一个奇妙的戏法。注意,这个戏法的使用是因为这些编译器并不是完全符合标准的,但是使用这个戏法得到了回报:它使这些编译器产生了优化的代码。

既然我们知道编译器是怎样在内部存储成员函数指针的,并且我们知道在问题中应该怎样为成员函数指针调整

this指针,我们的代码在设置委托时可以自己调整this指针。对单一继承类的函数指针,则不需要进行调整;对多重继承,则只需要一次加法就可完成调整;对虚拟继承...就有些麻烦了。但是这样做是管用的,并且在大多数情况下,所有的工作都在编译时完成!

这是最后一个诀窍。我们怎样区分不同的继承类型?并没有官方的方法来让我们区分一个类是多重继承的还是其他类型的继承。但是有一种巧妙的方法,你可以查看我在前面给出了一个列表(见中篇)——对

MSVC,每种继承方式产生的成员函数指针的大小是不同的。所以,我们可以基于成员函数指针的大小使用模版!比如对多重继承类型来说,这只是个简单的计算。而在确定unknown_inheritance16字节)类型的时候,也会采用类似的计算方法。

对于微软和英特尔的编译器中采用不标准

12字节的虚拟继承类型的指针的情况,我引发了一个编译时错误(compile-time error),因为需要一个特定的运行环境(workaround)。如果你在MSVC中使用虚拟继承,要在声明类之前使用FASTDELEGATEDECLARE宏。而这个类必须使用unknown_inheritance(未知继承类型)指针(这相当于一个假定的__unknown_inheritance关键字)。例如:

FASTDELEGATEDECLARE(CDerivedClass)

class CDerivedClass : virtual public CBaseClass1, virtual public CBaseClass2 {

// : (etc)

};

这个宏和一些常数的声明是在一个隐藏的命名空间中实现的,这样在其他编译器中使用时也是安全的。

MSVC7.0或更新版本)的另一种方法是在工程中使用/vmg编译器选项。而Inter的编译器对/vmg编译器选项不起作用,所以你必须在虚拟继承类中使用宏。我的这个代码是因为编译器的bug才可以正确运行,你可以查看代码来了解更多细节。而在遵从标准的编译器中不需要注意这么多,况且在任何情况下都不会妨碍FASTDELEGATEDECLARE宏的使用。

一旦你将类的对象指针和成员函数指针转化为标准形式,实现单一目标的委托(

single-target delegate)就比较容易了(虽然做起来感觉冗长乏味)。你只要为每一种具有不同参数的函数制作相应的模板类就行了。实现其他类型的委托的代码也大都与此相似,只是对参数稍做修改罢了。

这种用非标准方式转换实现的委托还有一个好处,就是委托对象之间可以用等式比较。目前实现的大多数委托无法做到这一点,这使这些委托不能胜任一些特定的任务,比如实现多播委托(

multi-cast delegates [Sutter3]

静态函数作为委托目标(

delegate target

理论上,一个简单的非成员函数(

non-member function),或者一个静态成员函数(static member function)可以被作为委托目标(delegate target)。这可以通过将静态函数转换为一个成员函数来实现。我有两种方法实现这一点,两种方法都是通过使委托指向调用这个静态函数的“调用器(invoker)”的成员函数的方法来实现的。

第一种方法使用了一个邪恶的方法(

evil method)。你可以存储函数指针而不是this指针,这样当调用“调用器”的函数时,它将this指针转化为一个静态函数指针,并调用这个静态函数。问题是这只是一个戏法,它需要在代码指针和数据指针之间进行转换。在一个系统中代码指针的大小比数据指针大时(比如DOS下的编译器使用medium内存模式时),这个方法就不管用了。它在目前我知道的所有32位和64位处理器上是管用的。但是因为这种方法还是不太好,所以仍需要改进。

另一种是一个比较安全的方法(

safe method),它是将函数指针作为委托的一个附加成员。委托指向自己的成员函数。当委托被复制的时候,这些自引用(self-reference)必须被转换,而且使“=”和“==”运算符的操作变得复杂。这使委托的大小增至4个字节,并增加了代码的复杂性,但这并不影响委托的调用速度。

我已经实现了上述两种方法,两者都有各自的优点:安全的方法保证了运行的可靠性,而邪恶的方法在支持委托的编译器下也可能会产生与此相同的汇编代码。此外,安全的方法可避免我以前讨论的在

MSVC中使用多重继承和虚拟继承时所出现的问题。我在代码中给出的是“安全的方法”的代码,但是在我给出的代码中“邪恶的方法”会通过下面的代码生效:

#define (FASTDELEGATE_USESTATICFUNCTIONHACK)

多目标委托(

multiple-target delegate)及其扩展

使用委托的人可能会想使委托调用多个目标函数,这就是多目标委托(

multiple-target delegate),也称作多播委托(multi-cast delegate)。实现这种委托不会降低单一目标委托(single-target delegate)的调用效率,这在现实中是可行的。你只需要为一个委托的第二个目标和后来的更多目标在堆上分配空间就可以了,这意味着需要在委托类中添加一个数据指针,用来指向由该委托的目标函数组成的单链表的头部节点。如果委托只有一个目标函数,将这个目标像以前介绍的方法一样保存在委托中就行了。如果一个委托有多个目标函数,那么这些目标都保存在空间动态分配的链表中,如果要调用函数,委托使用一个指针指向一个链表中的目标(成员函数指针)。这样的话,如果委托中只有一个目标,函数调用存储单元的个数为1;如果有nn>0)个目标,则函数调用存储单元的个数为n+1(因为这时函数指针保存在链表中,会多出一个链表头,所以要再加一——译者注),我认为这样做最合理。

由多播委托引出了一些问题。怎样处理返回值?(是将所有返回值类型捆绑在一起,还是忽略一部分?)如果把同一个目标在一个委托中添加了两次那会发生什么?(是调用同一个目标两次,还是只调用一次,还是作为一个错误处理?)如果你想在委托中删除一个不在其中的目标应该怎么办?(是不管它,还是抛出一个异常?)

最重要的问题是在使用委托时会出现无限循环的情况,比如,

A委托调用一段代码,而在这段代码中调用B委托,而在B委托调用的一段代码中又会调用A委托。很多事件(event)和信号跟踪(signal-slot)系统会有一定的方案来处理这种问题。

为了结束我的这篇文章,我的多播委托的实现方案就需要大家等待了。这可以借鉴其他实现中的方法——允许非空返回类型,允许类型的隐式转换,并使用更简捷的语法结构。如果我有足够的兴趣我会把代码写出来。如果能把我实现的委托和目前流行的某一个事件处理系统结合起来那会是最好不过的事情了(有自愿者吗?)。

本文代码的使用

原代码包括了

FastDelegate的实现(FastDelegate.h)和一个demo .cpp的文件用来展示使用FastDelegate的语法。对于使用MSVC的读者,你可以建立一个空的控制台应用程序(Console Application)的工程,再把这两个文件添加进去就好了,对于GNU的使用者,在命令行输入“gcc demo.cpp”就可以了。

FastDelegate可以在任何参数组合下运行,我建议你在尽可能多的编译器下尝试,你在声明委托的时候必须指明参数的个数。在这个程序中最多可以使用8个参数,若想进行扩充也是很容易的。代码使用了fastdelegate命名空间,在fastdelegate命名空间中有一个名为detail的内部命名空间。

Fastdelegate使用构造函数或bind()可以绑定一个成员函数或一个静态(全局)函数,在默认情况下,绑定的值为0(空函数)。可以使用“!”操作符判定它是一个空值。

不像用其他方法实现的委托,这个委托支持等式运算符(==, !=)。

下面是FastDelegateDemo.cpp的节选,它展示了大多数允许的操作。CBaseClassCDerivedClass的虚基类。你可以根据这个代码写出更精彩的代码,下面的代码只是说明使用FastDelegate的语法:

using namespace fastdelegate;

int main(void)

{

printf("-- FastDelegate demo --/nA no-parameter

delegate is declared using FastDelegate0/n/n");

FastDelegate0 noparameterdelegate(&SimpleVoidFunction);

noparameterdelegate();

//调用委托,这一句调用SimpleVoidFunction()

printf("/n-- Examples using two-parameter delegates (int, char *) --/n/n");

typedef FastDelegate2 MyDelegate;

MyDelegate funclist[12]; // 委托初始化,其目标为空

CBaseClass a("Base A");

CBaseClass b("Base B");

CDerivedClass d;

CDerivedClass c;

// 绑定一个成员函数

funclist[0].bind(&a, &CBaseClass::SimpleMemberFunction);

//你也可以绑定一个静态(全局)函数

funclist[1].bind(&SimpleStaticFunction);

//绑定静态成员函数

funclist[2].bind(&CBaseClass::StaticMemberFunction);

// 绑定const型的成员函数

funclist[3].bind(&a, &CBaseClass::ConstMemberFunction);

// 绑定虚拟成员函数

funclist[4].bind(&b, &CBaseClass::SimpleVirtualFunction);

// 你可以使用”=”来赋值

funclist[5] = MyDelegate(&CBaseClass::StaticMemberFunction);

funclist[6].bind(&d, &CBaseClass::SimpleVirtualFunction);

//最麻烦的情况是绑定一个抽象虚拟函数(abstract virtual function

funclist[7].bind(&c, &CDerivedClass::SimpleDerivedFunction);

funclist[8].bind(&c, &COtherClass::TrickyVirtualFunction);

funclist[9] = MakeDelegate(&c, &CDerivedClass::SimpleDerivedFunction);

// 你也可以使用构造函数来绑定

MyDelegate dg(&b, &CBaseClass::SimpleVirtualFunction);

char *msg = "Looking for equal delegate";

for (int i=0; i<12; i++) {

printf("%d :", i);

// 可以使用”==”

if (funclist[i]==dg) { msg = "Found equal delegate"; };

//可以使用”!”来判应一个空委托

if (!funclist[i]) {

printf("Delegate is empty/n");

} else {

// 调用生成的经过优化的汇编代码

funclist[i](i, msg);

};

}

};

因为我的代码利用了

C++标准中没有定义的行为,所以我很小心地在很多编译器中做了测试。具有讽刺意味的是,它比许多所谓标准的代码更具有可移植性,因为几乎所有的编译器都不是完全符合标准的。目前,核心代码已成功通过了下列编译器的测试:

Microsoft Visual C++ 6.0, 7.0 (.NET) and 7.1 (.NET 2003) (including /clr 'managed C++'),

GNU G++ 3.2 (MingW binaries),

Borland C++ Builder 5.5.1,

Digital Mars C++ 8.38 (x86, both 32-bit and 16-bit),

Intel C++ for Windows 8.0,

Metroworks CodeWarrior for Windows 9.1 (in both C++ and EC++ modes)

对于

Comeau C++ 4.3 (x86, SPARC, Alpha, Macintosh),能够成功通过编译,但不能链接和运行。对于Intel C++ 8.0 for Itanium能够成功通过编译和链接,但不能运行。

此外,我已对代码在

MSVC 1.5 4.0Open Watcom WCL 1.2上的运行情况进行了测试,由于这些编译器不支持成员函数模版,所以对这些编译器,代码不能编译成功。对于嵌入式系统不支持模版的限制,需要对代码进行大范围的修改。(这一段是在刚刚更新的原文中添加的——译者注)

而最终的

FastDelegate并没有进行全面地测试,一个原因是,我有一些使用的编译器的评估版过期了,另一个原因是——我的女儿出生了!如果有足够的兴趣,我会让代码在更多编译器中通过测试。(这一段在刚刚更新的原文中被删去了,因为作者目前几乎完成了全部测试。——译者注)

总结

为了解释一小段代码,我就得为这个语言中具有争议的一部分写这么一篇长长的指南。为了两行汇编代码,就要做如此麻烦的工作。唉

~

我希望我已经澄清了有关成员函数指针和委托的误解。我们可以看到为了实现成员函数指针,各种编译器有着千差万别的方法。我们还可以看到,与流行的观点不同,委托并不复杂,并不是高层结构,事实上它很简单。我希望它能够成为这个语言(标准

C++)中的一部分,而且我们有理由相信目前已被一些编译器支持的委托,在不久的将来会加入到标准C++的新的版本中(去游说标准委员会!)。

据我所知,以前实现的委托都没有像我在这里为大家展示的

FastDelegate一样有如此高的性能。我希望我的代码能对你有帮助。如果我有足够的兴趣,我会对代码进行扩展,从而支持多播委托(multi-cast delegate)以及更多类型的委托。我在CodeProject上学到了很多,并且这是我第一次为之做出的贡献。

参考文献

[GoF] "Design Patterns: Elements of Reusable Object-Oriented Software", E. Gamma, R. Helm, R. Johnson, and J. Vlissides.

I've looked at dozens of websites while researching this article. Here are a few of the most interesting ones:

我在写这篇文章时查看了很多站点,下面只是最有趣的一些站点:

[Boost] Delegates can be implemented with a combination of boost::function and boost::bind. Boost::signals is one of the most sophisticated event/messaging system available. Most of the boost libraries require a highly standards-conforming compiler. http://www.boost.org/

[Loki] Loki provides 'functors' which are delegates with bindable parameters. They are very similar to boost::function. It's likely that Loki will eventually merge with boost. http://sourceforge.net/projects/loki-lib

[Qt] The Qt library includes a Signal/Slot mechanism (i.e., delegates). For this to work, you have to run a special preprocessor on your code before compiling. Performance is very poor, but it works on compilers with very poor template support. http://doc.trolltech.com/3.0/signalsandslots.html

[Libsigc++] An event system based on Qt's. It avoids the Qt's special preprocessor, but requires that every target be derived from a base object class (using virtual inheritance - yuck!). http://libsigc.sourceforge.net/

[Hickey]. An old (1994) delegate implementation that avoids memory allocations. Assumes that all pointer-to-member functions are the same size, so it doesn't work on MSVC. There's a helpful discussion of the code here. http://www.tutok.sk/fastgl/callback.html

[Haendal]. A website dedicated to function pointers?! Not much detail about member function pointers though. http://www.function-pointer.org/

[Sutter1] Generalized function pointers: a discussion of how boost::function has been accepted into the new C++ standard. http://www.cuj.com/documents/s=8464/cujcexp0308sutter/

[Sutter2] Generalizing the Observer pattern (essentially, multicast delegates) using std::tr1::function. Discusses the limitations of the failure of boost::function to provide operator ==.

http://www.cuj.com/documents/s=8840/cujexp0309sutter

[Sutter3] Herb Sutter's Guru of the Week article on generic callbacks. http://www.gotw.ca/gotw/083.htm

关于作者

Don Clugston

我在澳大利亚的

high-tech startup工作,是一个物理学家兼软件工程师。目前从事将太阳航空舱的硅质晶体玻璃(CSG)薄膜向市场推广的工作。我从事有关太阳的(solar)研究,平时喜欢做一些软件(用作数学模型、设备控制、离散事件触发器和图象处理等),我最近喜欢使用STLWTL写代码。我非常怀念过去的光荣岁月:)而最重要的,我有一个非常可爱的儿子(20025月出生)和一个非常年轻的小姐(20045月出生)。

“黑暗不会战胜阳光,阳光终究会照亮黑暗。”

译者注

由于本文刚发表不久,作者随时都有可能对文章或代码进行更新,若要浏览作者对本文的最新内容,请访问:

http://www.codeproject.com/cpp/FastDelegate.asp

点击以下链接下载

FastDelegate的源代码:

http://www.codeproject.com/cpp/FastDelegate/FastDelegate_src.zip

(全文完)

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. C语言数组实现冒泡排序和选择排序程序

    冒泡排序: 冒泡排序的的优点是好理解,稳定,再就是空间复杂度低,不需要额外开辟数组元素的临时保存控件,当然了,编写起来也容易。其算法很简单,就是比较数组相邻的两个值,把大的像泡泡一样“冒”到数组后面去,一共要执行N的平方除以2这么多次的比较和交换的操作(N为数…...

    2024/4/19 10:50:41
  2. 个人开源项目 微阅

    微阅是一款使用 MVP + Retrofit2 + Rxjava + dagger2 等框架开发的阅读软件。包括新闻、视频、煎蛋三个模块,项目的大部分功能已经完成。Java 版本 : https://github.com/Will-Ls/WeiYue Kotlin 版本:https://github.com/Will-Ls/WeiYueKotlin 撸码不易,可以的话点个 star …...

    2024/5/1 5:15:39
  3. 数据库设计--ER图

    数据库设计的基本步骤 (1)需求分析阶段:需求收集和分析,得到数据字典和数据流图。 (2)概念结构设计阶段:对用户需求综合、归纳与抽象,形成概念模型,用E-R图表示。 (3)逻辑结构设计阶段:将概念结构转换为某个DBMS所支持的数据模型。 (4)数据库物理设计阶段:为逻…...

    2024/5/1 7:47:36
  4. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(五)cacti安装

    1.安装LAMP环境这里就不做介绍,网上一堆的相关文档,还有很多牛人写的自动化安装脚本2.安装rrdtoolyum install cairo-devel libxml2-devel pango pango-devel rrdtool –y 3.安装SNMP操作系统一般自带SNMP,如果没有即安装yum -y install net-snmp net-snmp-libs net-snmp-ut…...

    2024/5/1 6:11:19
  5. 7-2 冒泡法排序 (30分)

    7-2 冒泡法排序 (30分)将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处…...

    2024/5/1 7:28:49
  6. Script Control 组件Win7 X64平台运行问题及示例

    本文要点:MSSCRIPT.OCX组件只有x86版本,所以要在x64系统下运行,请使用云盘中的x86版本WScript安装程序。将以下示例代码存为js文件,将其拖动到x86版本的WScript.exe或CScript.exe程序上即可以运行。示例 Microsoft Script Control 1.0 的Error和Timeout两个事件的使用。示例…...

    2024/4/9 7:36:22
  7. std::bind 绑定类成员重载函数和函数指针的高级用法

    //todo/*[root@Slave02 thread]# g++ bind.cpp -o bind -g -Wall -std=gnu++11 -lpthread;./bind使用函数指针,调用全局函数 f,11class void Test::print(const std::string& str,int32_t i) 对比测试 std::mem_fn 和 std::bind,并调用类重载函数,0class void Test::print…...

    2024/4/12 22:19:44
  8. SQL数据库实战需求分析→数据库设计

    从这开始,就真正进入项目实战啦。先说点体会,我刚开始接触编程的时候,都是编写一些小东西,往往都是半天或者一天什么的就编完了,那时候根本没想过做程序之前还要有需求分析。经过快两年的学习,接触的都是比较大的系统,才明白没有需求分析的程序都太业余了,没有任何技术…...

    2024/4/9 7:36:19
  9. android下使用https协议发请求

    Android用Java开发,Java自带的http API有HttpURLConnection,Android系统又加上了Apache Httpclient,后来在22版本中HttpClient又被Google删除,所以我们不使用HttpClient来做网络请求了,这里只给出HttpURLConnection的方式。原生的写法理解的没问题了,用第三方的写法也好弄…...

    2024/4/9 7:36:18
  10. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(七)nagios+cacti整合

    nagios和cacti的安装请参考之前的文章安装,这里介绍二者如何整合在一起。ndoutils将nagios的监控数据写入数据库cacti则将ndoutil插件写入数据库的数据展示在页面上,因为数据写入数据库会因为各种因素延时,所以有时候nagios自身的页面有的监控项已经告警,但是cacti页面可能还…...

    2024/4/9 7:36:18
  11. 图解冒泡排序法(C语言实现)

    算法思想动画图解选择排序法代码演示运行结果分析代码演示运行结果代码演示运行结果算法优化代码演示运行结果说明 算法思想 对于输入到冒泡排序算法中的元素,从前往后,比较相邻两个元素,如果前一个元素比后一个元素大,就交换两个元素。 对于每一对相邻的元素不断重复上面的…...

    2024/4/14 2:31:36
  12. 了解c++成员函数调用以及引用

    成员函数指针我一直有点困惑在c++的类中并不包含成员函数,比如class A{public:void a(){cout<<"a";}void b(){}void c(){} };sizeof(A)=1; 然后A A1; A1.a/b/c()是可以工作的。c++是如何找到成员函数的,那我想函数总应该有一个地址,通过取得一个函数的地址…...

    2024/4/13 0:56:39
  13. Objective-C(2)离不开的---类与对象

    接口与实现的分离Objective-C定义一个类,分成两部分:接口、实现 接口(公开):声明类中的成员变量、属性、方法。 实现(隐藏):实现类中的方法。接口与实现分离的好处: 想要使用这个类时只需知道接口部分即可。 同时将实现部分隐藏起来,有利于…...

    2024/4/28 11:55:22
  14. 几种数据库设计思想

    四种高效数据库设计思想——提高查询效率:设计数据库表结构时,我们首先要按照数据库的三大范式进行建立数据。 1. 1NF每列不可拆分 2. 2NF确保每个表只做一件事情 3. 3NF满足2NF,消除表中的依赖传递。 三大范式的出现是在上世纪70年代,由于内存资源比较昂贵,所以严格按照三…...

    2024/4/28 8:44:47
  15. 利用函数指针实现父类函数调用子类函数

    父子类关系对于继承关系中的父类和子类,我们可以说子类是父类的一种,子类继承了父类的属性和行为。因此,子类可以访问父类的所有非私有成员。相反,父类一般情况下是不能访问子类成员的。然而,我们可以通过一些方法间接的实现父类访问子类,即父类函数访问子类函数。方法一…...

    2024/4/28 23:00:10
  16. C语言中的冒泡排序法简述

    **C语言中的冒泡排序法简述**冒泡排序法的由来是因为在对一个数组进行排序时,把最大的数字放在数组的左后,第二大其次,以此类推,当我们进行比较时,比较出最大值,最大值后面就可以不用参加比较,以此类推最后变成两个数字的比较。3.下面贴出我们的程序: #include <std…...

    2024/4/28 19:42:51
  17. ZXing竖屏扫描

    zxing实现竖屏扫描第一步:修改AndroidManifest清单文件,删除AndroidManifest中CaptureActivity的screenOrientation属性:<activity android:name=".CaptureActivity" android:screenOrientation="landscape"android:clearTaskOnLaunch…...

    2024/4/28 0:12:58
  18. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(八)nconf安装

    nconf提供WEB界面,管理nagios配置,其将nagios配置文件放入数据库,用户做相应修改后点击生成配置文件,Nconf会从数据库中将配置写入配置文件。所以最后nagios的配置还是以文件的形式存在,这是相对与nagioSQL本人比较喜欢Nconf的原因,其次Nconf还提供了静态文件的修改页面。…...

    2024/4/28 0:27:04
  19. 使用C语言实现冒泡排序算法

    冒泡排序 冒泡排序属于交换排序的一种。所谓交换,就是根据序列中两个关键字的比较结果来确定这两个记录在序列中的位置。 冒泡排序的基本思想: 假设一个待排序列长度为n,从后往前(或从前往后)两两比较元素的值,若为正序则不操作,若为逆序(即A[i-1]>A[i])则交换它们…...

    2024/4/27 16:52:50
  20. 数据库设计与优化

     数据库设计与优化 摘 要:数据库技术是计算机科学中发展最快的领域之一,也是应用最广的技术之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。本文讨论数据库设计流程的所有重要方面,包括需求分析阶段;概念设计阶段;逻辑设计阶段;物理设计阶段;数据库…...

    2024/4/27 23:05:06

最新文章

  1. 深度学习中的模块化设计

    模块化设计在机器学习和深度学习领域中是一个重要的概念&#xff0c;特别是在构建和改进像编码器-解码器这样的复杂模型时。以下是模块化设计如何帮助快速集成最新研究成果的一些关键点&#xff1a; 即插即用&#xff1a;模块化设计允许研究人员将新的研究成果如新的注意力机制…...

    2024/5/1 10:09:22
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Day51 动态规划 part12

    Day51 动态规划 part12 309.最佳买卖股票时机含冷冻期 我的思路&#xff1a; 按着题解的思路&#xff0c;将状态方程分为四种情况&#xff1a; 第 i 天 dp[i][0] Math.max(dp[i - 1][0], Math.max(dp[i - 1][1] - prices[i], dp[i - 1][3] - prices[i])); 手里有股票&#…...

    2024/4/27 14:35:38
  4. 腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践

    腾讯云容器与Serverless的融合&#xff1a;探索《2023技术实践精选集》中的创新实践 文章目录 腾讯云容器与Serverless的融合&#xff1a;探索《2023技术实践精选集》中的创新实践引言《2023腾讯云容器和函数计算技术实践精选集》整体评价特色亮点分析Serverless与Kubernetes的…...

    2024/4/30 17:11:00
  5. vue项目引入微信sdk: npm install weixin-js-sdk --save报错

    网上查到要用淘宝的镜像 同事告知旧 域名&#xff1a;https://registry.npm.taobao.org/已经不能再使用 使用 npm config set registry http://registry.npmmirror.com...

    2024/4/29 5:29:19
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57