Qualquer pergunta de um PROFI para um SUPER PROFI - 1. - página 11

 
joo:

Fez isso, ainda assim o mesmo erro:

Zhunko:

O projeto foi copiado no VC++ 6.0 com suas propriedades ou foi montado separadamente?

Já tive três ocasiões em que usei funções na VS 2010 que não estão disponíveis em XP. Tudo funcionou no Vista e no 7, mas o terminal não viu a biblioteca no XP.

Zhunko:

Eu o escrevi no início do tópico. Acontece quando você usa funções WinAPI que estão ausentes em XP. Mais uma razão. Se a versão mínima do sistema for limitada por uma versão superior.

Estou experimentando a mesma coisa agora. Eu nunca cheguei a procurar por esta função.

 

Zhunko:

joo:

Fez isso, ainda assim o mesmo erro:

Zhunko:

O projeto foi copiado no VC++ 6.0 com suas propriedades ou foi montado separadamente?

Já tive três ocasiões em que usei funções no VS 2010 que não estão disponíveis em XP. Tudo funcionou no Vista e no 7, mas o terminal não viu a biblioteca no XP.

Zhunko:

Eu o escrevi no início do tópico. Acontece quando você utiliza as funções WinAPI que estão ausentes na XP. Mais uma razão. Se a versão mínima do sistema for limitada por uma versão superior.

Estou experimentando a mesma coisa agora. Nunca cheguei a procurar por esta função.

Eu encontrei a razão! Mas eu não sei o que fazer com isso.

O problema acabou sendo nesta construção de um método de classe com métodos estáticos:

    static HWND HandleByProcessIdAndClass()
     {
      HWND   hwndLocal = NULL; // Дескриптор искомого окна.
      size_t i = 0;

      ::EnterCriticalSection(&GetInstance()->csOne);
      ::EnterCriticalSection(&GetInstance()->csMultiple);
     ................. Здесь защищаемый код ...................
      ::LeaveCriticalSection(&GetInstance()->csMultiple);
      ::LeaveCriticalSection(&GetInstance()->csOne);
      return(hwndLocal);
     }

Uma vez removida a sincronização (destacada em vermelho), a biblioteca torna-se visível para XP. No Vista funciona.

Talvez não seja a versão suficiente de alguma biblioteca do sistema?

=======

Sobre esta classe, preciso esclarecer.

Todos os métodos de classe com métodos "Windows" estáticos, e há cerca de 80 deles, têm sincronização semelhante.

O método especificado é chamado primeiro no construtor de uma instância de outra classe "WindowsMT4".

Parece que a classe "Windows" é inicializada fora do tempo.

 

Eu encontrei a causa. Andrei ajudou. Eu fiz mal os singletons.

XP e Vista inicializam as aulas de forma diferente. Você precisa dos singletons certos.

 
Zhunko:

Eu encontrei a causa. Andrei ajudou. Eu fiz mal os singletons.

XP e Vista inicializam as aulas de forma diferente. Você precisa dos singletons certos.


Isso é tão nojento. Isso é simplesmente horrível!
 
C-4:

Isso é um verdadeiro aborrecimento. Isso é simplesmente horrível!
Oh, vamos lá... :-)) Acabou de converter a classe com métodos estáticos em singleton. Tudo funciona.
 
Zhunko:
Sim, está bem... :-)) Acabou de converter uma classe com métodos estáticos em singleton. Tudo funciona.

Pergunta para o superprofissional compartilhar suas experiências:)) - como se remove um singleton?

 
alsu:

Pergunta para o superprofissional compartilhar suas experiências:)) - como se remove um singleton?

Você quer dizer limpar os recursos? No destruidor, você pode.
 
Zhunko:
O que você quer dizer com recursos claros? Você pode no destruidor.

Não, no sentido de remover o objeto em si - que procedimento decide quando removê-lo?

Eu não tenho nenhum propósito prático no momento, apenas lembrei que uma vez que estava fazendo um projeto, que usava vários modelos de singleton - assim, sempre havia problemas com o momento da remoção do singleton - eu tinha que fazer alguns problemas com o rastreamento de referência, o embrulho do destruidor em invólucros e assim por diante... E quando, por exemplo, um dos módulos caiu devido a uma exceção, foi uma bagunça. Como resultado, foi a última vez que mexi com singletons, pois me pareceu muito mais um incômodo do que um benefício)) Talvez eu esteja errado.

 
alsu:

Não, no sentido de remover o objeto em si - que procedimento decide quando removê-lo?

Eu não tenho nenhum propósito prático no momento, apenas lembrei que uma vez que estava fazendo um projeto, que usava vários modelos de singleton - assim, sempre havia problemas com o momento da remoção do singleton - eu tinha que fazer alguns problemas com o rastreamento de referência, o embrulho do destruidor em invólucros e assim por diante... E quando, por exemplo, um dos módulos caiu devido a uma exceção, foi uma bagunça. Como resultado, foi a última vez que mexi com singletons, pois me pareceu muito mais um incômodo do que um benefício)) Talvez eu esteja errado.

Aprendeu singletons recentemente. Aprendi que não posso passar sem eles. Eu não sei como apagar. Não foi necessário.
 

alsu:

Como resultado, essa foi a última vez que mexi com singletons, pois me pareceu ser muito mais incômodo do que valia). Talvez eu esteja errado.

Se você estiver tendo problemas para remover um singleton, provavelmente ele não está sendo usado corretamente. Embora os singletons também sejam diferentes, tome Phoenix, por exemplo.