Gtkmm + threads -> Como fazer?

Iniciado por Darcamo, 23 de Fevereiro de 2006, 18:56

tópico anterior - próximo tópico

Darcamo

Fiz um programa usando Gtkmm (um bind da Gtk para C++), mas tava com um problema. Tem uma função que é executada quando clico em um botão, mas essa função é bem pesada e demora até o programa terminá-la e voltar a executar o loop da GTK. Com isso a janela não é atualizada e novos eventos da interface gráfica não são computados até que a função termine.

Ouvi dizer que pra resolver isso teria que usar threads e que com isso é possível rodar diferentes partes do programa ao mesmo tempo. Fui atras de como utilizar threads no linux e até fiz um programinha simples com duas threads cada uma exibindo uma coisa na tela.

Mas não consegui unir as duas coisas (GTKmm + threads).

Alguém já mexeu com isso?
Se sim, poderiam me passar algum código fonte que crie uma janela com um botão e que ao clicar nesse botão o programa crie uma thread que execute um laço infinito (apenas para ser pesado, poder ser um sleep por alguns segundos para que ele fique dentro da função durante um tempo também), mas que por executar essa função usando uma thread o loop da GTK continue rodando enquanto a função é calculada e a janela continue sendo atualizada e aceitando novos eventos.

Não sei se fui muito claro.

AsA

Darcamo, não sei como te responder :P mas tenho uma pergunta!! Como faço para usar o gtkmm? Existe uma interface ou é por outros progrmas, como o Glade? Queria dar uma olhada em outras opções para configurar interfaces!

Valeu!

Argemiro Neto.

Darcamo

Cara, você desenterrou esse tópico.  :P
Já resolvi esse problema de usar threads e gtkmm (um bom tempo depois de ter postado).

Para usar a gtkmm, instala a versão de desenvolvimento dela (o pacote libgtkmm-2.4-dev no synaptic).
Depois é só configurar sua IDE com (ou acrescentar no seu makefile) as informações para encontrar os arquivos de cabeçalho .h da gtkmm e linkar com ela. Para isso usa o pkg-config.
pkg-config gtkmm-2.4 --cflags
pkg-config gtkmm-2.4 --libs

Caso queira usar o glade (e eu aconselho), instala o pacote libglademm-2.4-dev e pega as informações com
pkg-config libglademm-2.4 --cflags
pkg-config libglademm-2.4 --libs

Exemplo usando o kdevelop
* Cria um novo projeto hello world
* Vai em Project > Project Options > Configure Options
* No Configure Options você vai ver os campos CPPFLAGS e LDFLAGS
* Coloca `pkg-config gtkmm-2.4 --cflags` no CPPFLAGS
* Coloca `pkg-config gtkmm-2.4 --libs` no LDFLAGS
* Agora é só usar a gtkmm normalmente e criar suas janelas, widgets, etc (consultar documentação da gtkmm)
* Para usar o glade o procedimento é análogo.

Obs: No exemplo acima eu coloquei a chamada ao pkg-config entre sinais de crase. Isso equivale a rodar no terminal e substituir pelo resultado. Bem conveniente.