none
Threads... Preciso de uma ajuda RRS feed

  • Pergunta

  • Bom dia pessoal, tudo certo com vocês?

    Então, achei alguns exemplos na internet sobre threads em C++ mas eu não sei se são boas práticas ou não.
    Gostaria de ver com vocês qual seria a melhor maneira de se criar uma thread em C++.

    Preciso que ela seja executada a cada 10 segundos para verificar uma pasta em disco caso exista arquivos. O método de verificação de arquivos está pronto, o que eu preciso agora é criar uma thread de tempo, tipo um Timer();

    Se alguém puder ajudar, agradeço muito.

    Att.

    Raphael

    segunda-feira, 31 de março de 2008 13:20

Todas as Respostas

  • O único "problema" ao utilizar varias threads é criar uma comunicação entre elas, você vai precisar de um mecanismo de sincronização entre as mesmas. Existem muitas maneiras de sincroniza-las. Mas o principio básico é o mesmo: cada uma deve "espera" a sua vez quando vão mexer na mesma variável por exemplo.
    Em geral você faz tal sincronização desta maneira:
    1. Cria uma função que vai ser o ponto de entrada para a nova thread.
    2. Define onde são os "pontos críticos", ou seja, onde que cada thread deve esperar sua vez.
    3. Inicia a nova thread.
    No seu caso você poderia fazer da seguinte forma:
    • Na função que vai ser o ponto de entrada da nova thread você cria um loop que testa a pasta a cada 10 segundos.
    • Se não houve modificações não faz nada.
    • Se houve ele avisa a outra thread que houve uma modificação na pasta. (Por exemplo alterando alguma variável de controle para true ou algo do tipo).
    • Na thread principal você cria outro loop que checa se a variavel é true ou false.
    O ponto crítico neste caso é quando qualquer uma das thread alteram o valor da variável "compartilhada" e está é a parte que deve ser sincronizada.
    A biblioteca que você vai utilizar depende muito da sua aplicação e como ela foi feita (managed/unmanaged e etc) se precisar de um exemplo de código poste aqui.
    domingo, 6 de abril de 2008 22:19