Pergunta

Existe alguma documentação sobre a comunicação fio cruz no Delphi? Como posso enviar mensagem para o segmento que não tem uma janela?

Foi útil?

Solução

Você só pode enviar mensagens (Windows) para tópicos que implementam um loop de mensagem padrão, que será criado automaticamente quando um identificador de janela é realizado.

Contudo, não é necessário o uso de mensagens para se comunicar com um fio. Basta deixá-lo esperar por um objeto de evento (TEvent em VCL), e sinalizar este evento quando você deseja que o segmento para executar uma função.

Mas se você é novo para multi-threading - não entrar em todos esses detalhes em seu próprio país, a menos que você quer para o efeito de aprendizagem. Basta usar a OmniThreadLibrary e ser feito com ele. Há muita coisa boa para ser aprendida por cavar em seus internos, uma vez que você sabe como usá-lo.

Editar:

Veja também as respostas para este questão que é muito semelhante.

Editar 2:

Quanto ao comentário perguntando "O que [OmniThreadLibrary] tornar mais fácil, ea que custo?" Eu só posso aconselhá-lo para verificá-la para si mesmo - isto é, se você estiver usando pelo menos Delphi 2007. Há várias amostras para ilustrar os conceitos, mas para um exemplo rápido "vida real", você poderia ter um olhar para este post - você não precisa mesmo para instalar a biblioteca para isso.

Eu também concordo que o uso de uma biblioteca para multi-threading requer um certo ato de fé. tomada OTOH ver com o que o VCL fornece dificilmente é uma alternativa. O código de exemplo que ainda usam a chamada mal concebida Sincronizar (). Não há suporte para coisas como produtor-consumidor-filas thread-safe, que são muito mais adequados para a programação multi-thread. E se você concorda que você precisa de uma fundamentação mais sólida para seus programas multi-threaded que o VCL proporciona - por que reinventar a roda especial

Quanto ao custo de usar a biblioteca: Você terá que tempo a si mesmo se é rápido o suficiente para você. Ele faz abstrair a comunicação entre threads em um IMHO boa maneira, mas cada abstração custa desempenho, obviamente.

Se você decidir que não é para você depois de tudo - escrever o código você mesmo. Eu fiz o mesmo para Delphi 4, e tenho vindo a utilizar esse código por quase 10 anos agora. E, a julgar pela quantidade de erros que eu encontrei e casos de canto vivi nesse tempo, eu definitivamente aconselhar alguém novo para multi-threading para não escrever seu próprio código da biblioteca para ele. E se você realmente quiser, tome as regras em desta postagem ao coração.

Outras dicas

A questão Delphi multi-threading mensagem Loop, também contém alguns exemplos de comunicação entre threads

Se você tem uma referência ao objeto de discussão, você pode simplesmente chamá-lo de dirigir, e ter a informação de loja procedimento ou atualizar em conformidade. Obviamente você tem que ter o cuidado de fazer as coisas de uma forma thread-safe.

Como alternativa, você pode usar um objeto de controle central através do qual os fios comunicar quando eles não estão ocupados. Eu tenho um aplicativo onde tópicos têm fins particulares, e são atribuídos um thread-ID. Qualquer segmento pode "post" uma mensagem com uma mensagem-ID e uma série de parâmetros para outro thread-ID e, em seguida, continuar com o seu trabalho. O outro Passe a pega no seu lazer, e age em conformidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top