/ / Detectar estágio de inicialização estática? - c ++, estático, namespaces

Detectar estágio de inicialização estática? - c ++, estático, namespaces

O que eu realmente quero é como posso saber quando cada estágio da inicialização do C ++ está realmente CONCLUÍDO?

Há inicialização estática onde é simplesas coisas são atribuídas. Depois, há uma inicialização estática dinâmica em que estatísticas mais complicadas são atribuídas, o que não é definido em "unidades de tradução". Isso é horrível e não há muitas maneiras fáceis de lidar. Eu uso namespaces em alguns lugares para fazer uma atribuição imediata isso acontece ao carregar arquivos de cabeçalho, mas a falha aqui é que isso pode ser substituído em uma das fases de inicialização.

Posso definir a inicialização para ser uma funçãoque faz "a coisa certa", mas seria muito mais fácil se eu pudesse SABER em que "fase" estou de alguma forma. Pelo que posso dizer, isso não é possível de forma alguma, mas espero que alguém por aí tenha boas notícias.

Eu tenho contornado o problema que estava causandoisso, que era código não usado, sendo vinculado inesperadamente porque estava no projeto. Ainda seria bom saber a resposta para isso, mas acho que a resposta é "não há como saber com certeza".

Eu editei a pergunta, eu realmente não quero saber se o main é iniciado per se.

Respostas:

3 para resposta № 1

Eu não entendo que problema você está tentando resolver.

Quando você constrói seu aplicativo, o vinculador adicionao código de inicialização que é o primeiro código a ser executado quando o sistema operacional carrega seu programa na memória. Este código fará todas as coisas de inicialização e, quando terminar, chamará sua função main ().

Se você está falando sobre substituir este código pelo seu próprio, você deve verificar os detalhes internos do seu compilador / vinculador (e tenha certeza de que sabe o que está fazendo !!).

Se sua pergunta for sobre ter váriosprocessos e você precisa saber se um dos processos foi iniciado, você deve usar um mecanismo de sincronização adequado (que pode ser um dos fornecidos pelo sistema operacional subjacente ou um que você crie o seu).


1 para resposta № 2

Que tal algo como isso:

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

main(){
is_started(true);
}

0 para resposta № 3

Se sua pergunta for sobre o Windows, sei que você pode detectar o messagepump de um processo iniciado. Dessa forma, você tem certeza de que tudo foi inicializado.

Claro que isso não voa para * nix


0 para a resposta № 4

se você está rodando no Windows, crie um mutex após a inicialização. Você pode então WaitForSingleOject naquele mutex para detectar se o seu programa foi realmente inicializado.

Muitos aplicativos fazem isso para detectar se a inicialização foi concluída e qual é a outra instância do aplicativo. Isso é especialmente verdadeiro se você quiser apenas 1 instância de um programa em execução.