Problemas na compilação de código c++ no netbeans 6.5  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

laudenpower wrote:Nesse caso em termos de performance ele se encaixa na situação que relatei ao vinny?
O code blocks funcionou corretamente, tava dando erro por que eu não apontei a pasta do projeto. Agora to lendo sobre c/c++ nesse caso pude observar que a sintaxe é muito próxima do java (o que prova que java "chupinhou" a sintax dos caras )


Se encaixa sim. Se você quiser usar o codeblocks também não tem problema, porque é um ide muito bom também. Eu prefiro o qtcreator por causa da ide muito parecida com o delphi para criar interfaces gráficas, e também do framework ser MVC. Mas no final existem várias opções.


www.citrox.com.br
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

[quote=luxu]kra usa o CodeBlocks, pq no netbeans dá muito trabalho msm configurá-lo...no CodeBlocks já vem td pronto![/quote]

O netbeans c++ precisa do shell dos unix para funcionar corretamente. Para usar em plataforma win32 ou win64 você precisa do Cygnus ou do MSys. Para win não compensa não, é preferível usar mingw com codeblocks ou qtcreator.

www.citrox.com.br
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

laudenpower wrote:Bom, vou desfiar meu rosário...
Tenho um servidor feito em vb que realiza uma consulta via serial rs485 para 5 dispositivos diferentes e com seus respectivos endereços.
Acontece que o meu objetivo é "tomar" o lugar de um desses 5 dispositivos, e para isso eu preciso emular o protocolo de comunicação dele.
A parte de emular o protocolo já foi realizada, porém o servidor realiza uma consulta de status dos dispositivos em um intervalo de 30ms entre um dispositivo e outro, e a consulta de status consiste em um pacote de 12 caracteres, onde está contido o endereço do dispositivo (para que o mesmo responda na sua vez).
Essa consulta é realizada em todos os dispositivos pelo servidor e quando acontece algo a algum dispositivo, esse deve responder assim que recebe o pacote de consulta contendo o seu endereço.
Então o dispositivo possui 30ms para realizar o envio do comando que indica a ocorrencia do evento nele (como o pressionamento de uma botoeira, por exemplo).
Nesse caso se o dispositivo demora mais de 30ms para devolver o comando referente ao evento ocorrido, o servidor acaba recebendo esse comando durante a consulta de outro dispositivo, invalidando assim o envio do dispositivo e quebrando o protocolo.

Resumindo: Preciso enviar um comando para o servidor numa faixa máxima de 30ms depois de receber o comando de consulta com o endereço do dispositivo emulado, pois se isso não acontecer o servidor passa a consultar o proximo dispositivo e o comando enviado é invalidado pelo servidor.

Tentei fazer isso em: Java, VB e delphi6 falhei miseravelmente em todos eles.


Posso estar errado, mas não creio que o c++ vá resolver a sua situação. Todas essas opções que você usou(java, delphi, vb) usam a mesma api do windows internamente.

www.citrox.com.br
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Se seu dispositivo requer que a resposta seja enviada em no máximo 30 ms, eu diria que é necessário deixar só essa parte que recebe a requisição e envia uma resposta (qualquer que seja ela) em uma thread com a prioridade RealTime (as outras threads não devem usar essa prioridade).

Esse é um dos poucos casos em que é absolutamente necessário alterar a prioridade de uma thread.

Atenção! Atenção! Atenção! Essa thread deve fazer quase nada, exceto pelo fato de responder rapidamente à requisição do dispositivo. Qualquer regra de negócio, etc, deve ser feita fora dessa thread.

(Por que é que você não precisaria disso se sua thread ficasse escutando um socket ou esperando ler de um arquivo? É que nesses dois casos o Windows já eleva a prioridade da thread que está esperando ler de um socket, ou ler de um arquivo, para uma prioridade bem alta. Uma vez que o socket tenha sido lido ou o arquivo tenha sido lido, então a prioridade baixa automaticamente. Mas no caso de uma interface serial, isso não ocorre. )


[WWW]
laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

thingol wrote:Se seu dispositivo requer que a resposta seja enviada em no máximo 30 ms, eu diria que é necessário deixar só essa parte que recebe a requisição e envia uma resposta (qualquer que seja ela) em uma thread com a prioridade RealTime (as outras threads não devem usar essa prioridade).

Esse é um dos poucos casos em que é absolutamente necessário alterar a prioridade de uma thread.

Atenção! Atenção! Atenção! Essa thread deve fazer quase nada, exceto pelo fato de responder rapidamente à requisição do dispositivo. Qualquer regra de negócio, etc, deve ser feita fora dessa thread.

(Por que é que você não precisaria disso se sua thread ficasse escutando um socket ou esperando ler de um arquivo? É que nesses dois casos o Windows já eleva a prioridade da thread que está esperando ler de um socket, ou ler de um arquivo, para uma prioridade bem alta. Uma vez que o socket tenha sido lido ou o arquivo tenha sido lido, então a prioridade baixa automaticamente. Mas no caso de uma interface serial, isso não ocorre. )


Nesse caso essa estratégia devo aplicar em c++ né?
Nesse caso eu também teria que cuidar da thread de recebimento de dados? pois se eu demorar muito nessa hora eu não terei tempo para escrever.

Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

juliocbq wrote:
laudenpower wrote:Bom, vou desfiar meu rosário...
Tenho um servidor feito em vb que realiza uma consulta via serial rs485 para 5 dispositivos diferentes e com seus respectivos endereços.
Acontece que o meu objetivo é "tomar" o lugar de um desses 5 dispositivos, e para isso eu preciso emular o protocolo de comunicação dele.
A parte de emular o protocolo já foi realizada, porém o servidor realiza uma consulta de status dos dispositivos em um intervalo de 30ms entre um dispositivo e outro, e a consulta de status consiste em um pacote de 12 caracteres, onde está contido o endereço do dispositivo (para que o mesmo responda na sua vez).
Essa consulta é realizada em todos os dispositivos pelo servidor e quando acontece algo a algum dispositivo, esse deve responder assim que recebe o pacote de consulta contendo o seu endereço.
Então o dispositivo possui 30ms para realizar o envio do comando que indica a ocorrencia do evento nele (como o pressionamento de uma botoeira, por exemplo).
Nesse caso se o dispositivo demora mais de 30ms para devolver o comando referente ao evento ocorrido, o servidor acaba recebendo esse comando durante a consulta de outro dispositivo, invalidando assim o envio do dispositivo e quebrando o protocolo.

Resumindo: Preciso enviar um comando para o servidor numa faixa máxima de 30ms depois de receber o comando de consulta com o endereço do dispositivo emulado, pois se isso não acontecer o servidor passa a consultar o proximo dispositivo e o comando enviado é invalidado pelo servidor.

Tentei fazer isso em: Java, VB e delphi6 falhei miseravelmente em todos eles.


Nesse caso a forma que o C++ utiliza para manipular porta serial é a mesma do java (com rxtx), VB e delphi? (Nesse caso o C++ utiliza apenas a api do windows ou existe outra forma?).

Posso estar errado, mas não creio que o c++ vá resolver a sua situação. Todas essas opções que você usou(java, delphi, vb) usam a mesma api do windows internamente.


Nesse caso c++ utiliza a api do windows também?

This message was edited 1 time. Last update was at 29/11/2010 14:06:31


Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

laudenpower wrote:
juliocbq wrote:
laudenpower wrote:Bom, vou desfiar meu rosário...
Tenho um servidor feito em vb que realiza uma consulta via serial rs485 para 5 dispositivos diferentes e com seus respectivos endereços.
Acontece que o meu objetivo é "tomar" o lugar de um desses 5 dispositivos, e para isso eu preciso emular o protocolo de comunicação dele.
A parte de emular o protocolo já foi realizada, porém o servidor realiza uma consulta de status dos dispositivos em um intervalo de 30ms entre um dispositivo e outro, e a consulta de status consiste em um pacote de 12 caracteres, onde está contido o endereço do dispositivo (para que o mesmo responda na sua vez).
Essa consulta é realizada em todos os dispositivos pelo servidor e quando acontece algo a algum dispositivo, esse deve responder assim que recebe o pacote de consulta contendo o seu endereço.
Então o dispositivo possui 30ms para realizar o envio do comando que indica a ocorrencia do evento nele (como o pressionamento de uma botoeira, por exemplo).
Nesse caso se o dispositivo demora mais de 30ms para devolver o comando referente ao evento ocorrido, o servidor acaba recebendo esse comando durante a consulta de outro dispositivo, invalidando assim o envio do dispositivo e quebrando o protocolo.

Resumindo: Preciso enviar um comando para o servidor numa faixa máxima de 30ms depois de receber o comando de consulta com o endereço do dispositivo emulado, pois se isso não acontecer o servidor passa a consultar o proximo dispositivo e o comando enviado é invalidado pelo servidor.

Tentei fazer isso em: Java, VB e delphi6 falhei miseravelmente em todos eles.


Nesse caso a forma que o C++ utiliza para manipular porta serial é a mesma do java (com rxtx), VB e delphi? (Nesse caso o C++ utiliza apenas a api do windows ou existe outra forma?).

Posso estar errado, mas não creio que o c++ vá resolver a sua situação. Todas essas opções que você usou(java, delphi, vb) usam a mesma api do windows internamente.


Nesse caso c++ utiliza a api do windows também?



Sim, isso mesmo. Todo procedimento usa a api do windows. Hoje não há como acessar o hardware sem passar pela vm do windows. É um procedimento de segurança que começou com o windows 2000 na época. Não há como acessar hardware nem diretamente com assembly rodando num 2k pra frente.

O que acontece é que a biblioteca do c++ é bem enxuta, o que te permite especificar bem o que você deseja fazer. Mas a mesma coisa pode ser feita em pascal ou vb. Basta usar as bibliotecas do windows.

O que te aconselho a fazer é remover os demais dispositivos e deixar apenas um para testes. Ou talvez mexer no protocolo e criar um semáforo para que quando o recurso compartilhado esteja em uso, um outro dispositivo não interfira na comunicação.

Se puder, faça um desenho para nós de como o protocolo funciona e de como é o esquema de comunicação. Aí vamos poder ter uma boa idéia do problema.

www.citrox.com.br
laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

juliocbq manda o teu mail que eu te mando a imagem, pois não tenho lugar para fazer upload para mostrar a imagem.

Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

Estava instalando o qtcreator depois da dica do julio e ao tentar compilar a api de porta serial que o mesmo indicou tenho o seguinte erro:



O que poderia ser?

Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team