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.