Fernando queiroz escreveu:Outra coisa que notei nas minhas rotinas é que se houver variáveis SEM SER LOCAL a coisa fica meio maluca, não sei porque
Depende ao que exatamente está se referindo.
Variáveis públicas são visÃveis em tudo, então, ela pode ser modificada por outro módulo, alterando o comportamento do módulo atual.
Variáveis private... dependendo de onde elas foram criadas, podem ficar visÃveis também.
Ao criar módulos que podem ser abertos ao mesmo tempo precisa muito cuidado com quais variáveis vai deixar visÃvel entre os módulos.
Não tem a ver com o seu caso, mas até por isso, o default de multithread é não deixar nada visÃvel de PUBLIC e PRIVATE, a não ser que isso seja indicado, porque o resultado pode ser imprevisÃvel. No caso de multithread e DBFs, os DBFs também não ficam visÃveis.
Mesmo no DBF, imagine um DO WHILE ! Eof() em um arquivo, e outra rotina alterar toda ordem durante esse DO WHILE....
Cada caso é um caso, é questão de analisar o seu caso, e ver se alguma variável PRIVATE pode estar sendo usada em mais de um módulo ao mesmo tempo, e que tem conteúdo alterado quando não poderia ter.
Sempre que possÃvel altere pra LOCAL, e quando necessário, passe para a sub-rotina como parâmetro, por referência ou não, conforme o caso.
compilação -w3 -es2 ajuda a organizar variáveis.
Trabalhoso no inÃcio, até que o fonte esteja totalmente ajustado.
Mas depois.... é só alegria.