检测静态初始化阶段? 我真正想要的是,如何知道C++初始化的每个阶段真正完成的时间?

检测静态初始化阶段? 我真正想要的是,如何知道C++初始化的每个阶段真正完成的时间?,c++,static,namespaces,C++,Static,Namespaces,在静态初始化中,简单的事情被分配。然后是动态静态初始化,在这里分配更复杂的静态,而不是跨“转换单元”定义。这有点可怕,没有很多简单的方法来应对。我在places中使用名称空间来进行加载头文件时发生的立即分配,但这里的缺陷是,这可以在初始化阶段之一被覆盖 我可以将初始化设置为一个做“正确的事情”的函数,但如果我知道自己处于哪个“阶段”,那就容易多了。据我所知,这在任何方面都是不可能的,但我希望有人会有一些好消息 我已经解决了导致这种情况的问题,因为代码在项目中,所以没有被意外地链接进来。知道这个问

在静态初始化中,简单的事情被分配。然后是动态静态初始化,在这里分配更复杂的静态,而不是跨“转换单元”定义。这有点可怕,没有很多简单的方法来应对。我在places中使用名称空间来进行加载头文件时发生的立即分配,但这里的缺陷是,这可以在初始化阶段之一被覆盖

我可以将初始化设置为一个做“正确的事情”的函数,但如果我知道自己处于哪个“阶段”,那就容易多了。据我所知,这在任何方面都是不可能的,但我希望有人会有一些好消息

我已经解决了导致这种情况的问题,因为代码在项目中,所以没有被意外地链接进来。知道这个问题的答案仍然很好,但我猜答案是“没有办法确定”


我编辑了这个问题,我真的不想知道main本身是如何启动的。

像这样的东西怎么样:

bool is_started(bool set_started=false){
  static bool flag = false;
  if(set_started)
     flag=true;
  return flag;
}

main(){
  is_started(true);
}

像这样的怎么样:

bool is_started(bool set_started=false){
  static bool flag = false;
  if(set_started)
     flag=true;
  return flag;
}

main(){
  is_started(true);
}

如果您的问题是关于windows的,我知道您可以从进程启动时检测消息泵。这样,您就可以确定所有内容都已初始化


当然,这不适用于*nix

如果您的问题是关于windows的,我知道您可以从进程启动时检测消息泵。这样,您就可以确定所有内容都已初始化


当然,这不是为*nix飞行

我不明白你想解决什么问题

构建应用程序时,链接器会添加启动代码,这是操作系统在内存中加载程序时要执行的第一个代码。这段代码将完成所有初始化工作,完成后将调用main()函数

如果您正在谈论用自己的代码替换此代码,您应该检查编译器/链接器的内部详细信息(并确保您知道自己在做什么!!)


如果您的问题是关于拥有多个进程,并且您需要知道其中一个进程是否已启动,则应使用适当的同步机制(可以是底层操作系统提供的同步机制之一,也可以是您自己制作的同步机制)。

我不明白您试图解决的问题是什么

构建应用程序时,链接器会添加启动代码,这是操作系统在内存中加载程序时要执行的第一个代码。这段代码将完成所有初始化工作,完成后将调用main()函数

如果您正在谈论用自己的代码替换此代码,您应该检查编译器/链接器的内部详细信息(并确保您知道自己在做什么!!)


如果您的问题是有多个进程,并且需要知道其中一个进程是否已启动,则应使用适当的同步机制(可以是底层操作系统提供的同步机制之一,也可以是您自己创建的同步机制)。

如果您在windows上运行,请在完成初始化后创建一个同步机制。然后,您可以在该互斥体上等待SingleObject,以检测程序是否真正初始化


许多应用程序这样做是为了检测启动是否完成以及应用程序的其他实例是什么。如果您只想运行一个程序实例,尤其如此。

如果您在windows上运行,请在完成初始化后创建一个实例。然后,您可以在该互斥体上等待SingleObject,以检测程序是否真正初始化


许多应用程序这样做是为了检测启动是否完成以及应用程序的其他实例是什么。如果您只希望一个程序运行一个实例,这一点尤其正确。

我认为,如果您的设计是基于main是否已启动,那么您就找错了方向。听起来好像你正在创建一个脆弱的框架,如果你说在多线程环境中使用它,以后可能会遇到技术困难。你需要这个做什么?我从未见过这样有用的情况。你能重新设计使问题消失吗?这不仅仅是看main是否启动,当然,如果我在main中调用某个东西,main就启动了。我想知道的原因是,当初始化运行时,如果知道我处于哪个阶段,那就太好了。我认为,如果你的设计是基于main是否已启动,那么你就找错了方向。听起来好像你正在创建一个脆弱的框架,如果你说在多线程环境中使用它,以后可能会遇到技术困难。你需要这个做什么?我从未见过这样有用的情况。你能重新设计使问题消失吗?这不仅仅是看main是否启动,当然,如果我在main中调用某个东西,main就启动了。我想知道的原因是,当初始化运行时,知道我处于哪个阶段是很好的。“初始化工具”包括调用构造函数和初始化全局对象所需的其他函数,因此您自己的一些代码在
main()
之前运行是正常的。“初始化工具”包括调用构造函数和初始化全局对象所需的其他函数,因此您自己的一些代码在
main()
之前运行是正常的。