[Rio-pm] Tk travando, devo usar threads?

Aureliano Guedes guedes_1000 em hotmail.com
Sexta Julho 6 14:48:03 PDT 2012


Bruno, obrigado por responder. Amanhã vou olhar com calma, ai darei um feedback independente de positivo ou negativo.
Contudo, quanto ao que me perguntou:


1) Esse "SECURITYTOKEN" muda? Se for estático, você poderia pegar ele uma única vez, talvez logo depois de fazer o login na hora que você faz uma instância da sua classe? [2]
R: Mudei, agora to pegando o SECIRITYTOKEN apenas uma vez, e isto esta servindo para ver se o login esta correto, uma vez que toda pagina tem ele e que se for igual a "guest" é porque não houve login, pois o "Bem Vindo" aparece mesmo se o login falhar.

2) Porque você usa (.*?) ou invés de um simples (.*) no matching?
R: Não sei, mudei já.

3) Veja bem que você está assumindo, que toda página contem esse SECURITYTOKEN, independente do que você fez por último com o seu $url... infelizmente a maneira como seu código está, não é nem um pouco "side-effect free", logo acho que você não deveria contar com isso...

Se por algum problema, ele não encontrar nada (eg. nem toda página do forum tem esse SECURITYTOKEN ou então por algum motivo a última requisição falhou ou não retornou esse token), o que terá na variável $1 e consequentemente na sua variável $token?
R: Toda pagina tem o "SECURITYTOKEN" já que para fazer qualquer ação preciso dele para gerar a permição, caso não haja login o SECURITYTOKEN é "guest".

4) Assim como no caso anterior, você está assumindo que a sua variável $url sempre terá um "Bem vindo" em algum lugar dela... isso poderia não acontecer? Talvez você estivesse assumindo isso porque após se logar aparece algo escrito "Bem-vindo"? Mais especificamente, depois de fazer o post da 1a mensagem [4], será que o conteúdo de $url ainda contem um SECURITYTOKEN ou ainda mesmo um "Bem-vindo" em alguma parte do html?
R: Não tenho certeza se tem o "Bem Vindo" ma so "SECURITYTOKEN" sim, inclusive mudei, agora a forma de ver se o login foi bem sucedido é verificar o "SECURITYTOKEN", mas como você falou, mudei verifico apenas uma vez logo após o login.

From: bruno.buss em gmail.com
Date: Fri, 6 Jul 2012 13:09:49 -0300
To: rio-pm em pm.org
Subject: Re: [Rio-pm] Tk travando, devo usar threads?

2012/7/6 Aureliano Guedes <guedes_1000 em hotmail.com>






Eu modifiquei, o projeto, não entendi como encaixar o AnyEvent (na verdade o AnyEvent ainda é muito complexo para mim), então usei threads. 


https://github.com/acpguedes/Chat.git

Mas ainda está problematico.



Percebe-se, pois o modo que você está usando threads não está servindo de absolutamente nada. Seu programa não está multi-thread em nada... 


Eu consigo enviar apenas uma msg, da segunda para frente não é enviada, alem disso, quando coloco para receber msg ele recebe de boa mas a interface fica travada, nem fechar ela eu consigo.



Sobre o update e o fato dele estar travando seu código:
https://github.com/acpguedes/Chat/blob/master/InterfaceSB.pm#L33-34


Logo depois de criar uma thread, você está dando join() nela o que simplesmente bloqueia a "thread original" da sua interface gráfica enquanto espera a sua thread recém criada retornar... o que não acontece NUNCA, já que ele fica preso em um "while(1)" [1] para sempre, já que você nunca seta $work como zero, nem faz um "last;".


Talvez você tenha tentado contornar isso usando a chamada do update() (que vem do Tk::Widget), mas talvez ele não esteja pegando nenhuma mensagem nova, não entra no if nem no elsif e nunca faz esse update e por isso a interface fica "travada"?


No mais, apenas mais uma questão: Você está em um "loop infinito", bombardeando o servidor com uma cacetada de requisições com o seu get_msg... talvez fosse um pouco mais educado colocar um tempo entre uma requisição e outra, não?







Sobre o envio da 2a mensagem em diante falhar:
Primeiro, assim como no caso acima a sua thread não serve de nada....


Como não conheço o sistema em questão (forum invaders, shoutbox, etc) vou fazer algumas perguntas:https://github.com/acpguedes/Chat/blob/master/Shoutbox.pm#L25


1) Esse "SECURITYTOKEN" muda? Se for estático, você poderia pegar ele uma única vez, talvez logo depois de fazer o login na hora que você faz uma instância da sua classe? [2]


2) Porque você usa (.*?) ou invés de um simples (.*) no matching?
3) Veja bem que você está assumindo, que toda página contem esse SECURITYTOKEN, independente do que você fez por último com o seu $url... infelizmente a maneira como seu código está, não é nem um pouco "side-effect free", logo acho que você não deveria contar com isso...


Se por algum problema, ele não encontrar nada (eg. nem toda página do forum tem esse SECURITYTOKEN ou então por algum motivo a última requisição falhou ou não retornou esse token), o que terá na variável $1 e consequentemente na sua variável $token?


4) Assim como no caso anterior, você está assumindo que a sua variável $url sempre terá um "Bem vindo" em algum lugar dela... isso poderia não acontecer? Talvez você estivesse assumindo isso porque após se logar aparece algo escrito "Bem-vindo"? Mais especificamente, depois de fazer o post da 1a mensagem [4], será que o conteúdo de $url ainda contem um SECURITYTOKEN ou ainda mesmo um "Bem-vindo" em alguma parte do html?





[1] https://github.com/acpguedes/Chat/blob/master/InterfaceSB.pm#L49


[2] https://github.com/acpguedes/Chat/blob/master/Shoutbox.pm#L12-17
[3] https://github.com/acpguedes/Chat/blob/master/Shoutbox.pm#L27


[4] https://github.com/acpguedes/Chat/blob/master/Shoutbox.pm#L29-31
[ ]'s-- 


Bruno C. Buss
http://www.brunobuss.net


_______________________________________________
Rio-pm mailing list
Rio-pm em pm.org
http://mail.pm.org/mailman/listinfo/rio-pm 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120706/a4fa7297/attachment.html>


Mais detalhes sobre a lista de discussão Rio-pm