usando thread .. erro
alguem sabe como faço pra resolver esse erro ??
CheckSynchronize called from thread $B78, which is NOT the main thread
uso uma thread A que start uma B.. pelo que li a respeito não posso chamar o CheckSynchronize de uma thread principal.. ???
CheckSynchronize called from thread $B78, which is NOT the main thread
uso uma thread A que start uma B.. pelo que li a respeito não posso chamar o CheckSynchronize de uma thread principal.. ???
Souza
Curtidas 0
Respostas
Massuda
31/10/2007
...não posso chamar o CheckSynchronize de uma thread principal.. ???
A mensagem de erro sugere exatamente o oposto... que CheckSynchronize DEVE ser chamada a partir da thread principal.GOSTEI 0
Souza
31/10/2007
[quote:a0162bbc79=´souza´]...não posso chamar o CheckSynchronize de uma thread principal.. ???
A mensagem de erro sugere exatamente o oposto... que CheckSynchronize DEVE ser chamada a partir da thread principal.[/quote:a0162bbc79]A PRINCIPAL SERIA A QUE FOI CRIADA PRIMEIRO ?
ESSE É O CODIGO QUE EXECUTA DENTRO DO EXECUTE DA ´A´..
if (form1.indListaBuffer > 10) and (bLeia = True) then
begin
CheckSynchronize(100);
TThreadtags.Create(False); // CRIO B
bLeia := False;
end;
seria isso ?
GOSTEI 0
Massuda
31/10/2007
Thread principal é aquela que é criada pelo Windows para rodar seu programa. Pelo seu texto, você criou duas threads... nenhuma delas é a thread principal.
GOSTEI 0
Massuda
31/10/2007
Explique melhor seu problema... eventualmente existe outra solução.
GOSTEI 0
Souza
31/10/2007
isso mesmo eu criei duas threads .. A que le um buffer e salva em uma Tlist e outra B que varre o tList pega o que foi lido pela A.. e grava no banco..
só que quando vou finalizar a gravação da esse erro :
CheckSynchronize called from thread $B78, which is NOT the main thread.
não to usando o synchronize(metodo);
no execute da thread ...
só que quando vou finalizar a gravação da esse erro :
CheckSynchronize called from thread $B78, which is NOT the main thread.
não to usando o synchronize(metodo);
no execute da thread ...
GOSTEI 0
Massuda
31/10/2007
Primeiro... porque você deseja usar isso?
GOSTEI 0
Souza
31/10/2007
eu preciso pegar as cotações de um servidor broadcast..
cotação de dollar, soja .....
dai me conecto a um ip e porta.. usando o indy.. leio co conteudo do buffer .. e salvo em um Tlist.. ´conteudo esse algumas tagas XML´,
a leitura é feita pela thread A .. a thread B trata a as tags lidas fecha o bloco xml e grava em uma tabela na base..
a A consegue ler sem problemas mas quando a B vai gravar da esse erro..,
CheckSynchronize called from thread $B78, which is NOT the main thread
..
faço duas threads pq tenho que ler o maximo de informação possivel.. do buffer para não perder cotação..
e uso o Tlist para armazenar o que foi lido... pq as tagas não vem completas então eu preciso concatenar o que foi lido .. para ter o bloco xml todo. esse é o papel da A.
se puder me add no msn .. fabio.srs@hotmail.com
obrigado pela atenção.
cotação de dollar, soja .....
dai me conecto a um ip e porta.. usando o indy.. leio co conteudo do buffer .. e salvo em um Tlist.. ´conteudo esse algumas tagas XML´,
a leitura é feita pela thread A .. a thread B trata a as tags lidas fecha o bloco xml e grava em uma tabela na base..
a A consegue ler sem problemas mas quando a B vai gravar da esse erro..,
CheckSynchronize called from thread $B78, which is NOT the main thread
..
faço duas threads pq tenho que ler o maximo de informação possivel.. do buffer para não perder cotação..
e uso o Tlist para armazenar o que foi lido... pq as tagas não vem completas então eu preciso concatenar o que foi lido .. para ter o bloco xml todo. esse é o papel da A.
se puder me add no msn .. fabio.srs@hotmail.com
obrigado pela atenção.
GOSTEI 0
Massuda
31/10/2007
ok, mas para que você usa esse CheckSynchronize? O que você espera que ele faça?
GOSTEI 0
Macario
31/10/2007
[quote:1f669903ae=´Massuda´][quote:1f669903ae=´souza´]...não posso chamar o CheckSynchronize de uma thread principal.. ???
A mensagem de erro sugere exatamente o oposto... que CheckSynchronize DEVE ser chamada a partir da thread principal.[/quote:1f669903ae]A PRINCIPAL SERIA A QUE FOI CRIADA PRIMEIRO ?
ESSE É O CODIGO QUE EXECUTA DENTRO DO EXECUTE DA ´A´..
if (form1.indListaBuffer > 10) and (bLeia = True) then
begin
CheckSynchronize(100);
TThreadtags.Create(False); // CRIO B
bLeia := False;
end;
seria isso ?[/quote:1f669903ae]
Nao sei bem se esta maneira de criar uma TThread dentro de outra é a ideal.
Voce poderia ter as duas independentes e usar o WaintFor para controlar a leitura. E se necessario usar a Classe Critical para nao perder o sincronismo.
:roll:
GOSTEI 0
Souza
31/10/2007
Pessoal para finalizar ..
eis o que estava dando erro nas threads ... a Thread B que fazia a gravação no banco usava um componente que fazia a chamada ao metodo checksycronize .. isso causava o erro na danadinha.... pois esse metodo não pode ser chamado por uma thread que não seja a principal (´a própria aplicação´)..
obrigado pela colaboração.
eis o que estava dando erro nas threads ... a Thread B que fazia a gravação no banco usava um componente que fazia a chamada ao metodo checksycronize .. isso causava o erro na danadinha.... pois esse metodo não pode ser chamado por uma thread que não seja a principal (´a própria aplicação´)..
obrigado pela colaboração.
GOSTEI 0