Multithread e multiplas janelas

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Multithread e multiplas janelas

Mensagem por JoséQuintas »

Encontrei o exemplo gtwin,mostrando o uso de múltiplas janelas, mas sem funcionamento independente.
Fechou uma janela fecha todas.
Tem como deixar o código independente?

Obs. No VB cada módulo tem sua própria janela, pode até ser duplicado, cada um com sua janela e funcionamento independente.
Variavel1 = New FormP060
Variavel2 = New FormP060
Variavel1.Show
Variavel2.Show

Código: Selecionar todos

/*
 * $Id: gtwin.prg 14676 2010-06-03 16:23:36Z vszakats $
 */

/*
 * Harbour Project source code:
 *    demonstration/test code for using more then one console window.
 *    It needs GT driver which supports such functionality, i.e.
 *    GTWVT in MS-Windows or GTXWC in XWindow.
 *
 * Copyright 2008 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
 * www - http://harbour-project.org
 *
 */

#include "box.ch"

#ifdef __PLATFORM__WINDOWS
   REQUEST HB_GT_WVT_DEFAULT
   #define THREAD_GT "WVT"
#else
   REQUEST HB_GT_STD_DEFAULT
   #define THREAD_GT "XWC"
#endif

proc main()
   local pGT, pGT1, pGT2

   ? "This is small test for using more then one console window."
   ? "It needs GT which supports such functionality i.e. GTWVT in"
   ? "MS-Windows or GTXWC in XWindow"
   wait

   ? "Create two new GTs:"
   pGT1 := hb_gtCreate( THREAD_GT )
   ? "1 =>", pGT1
   pGT2 := hb_gtCreate( THREAD_GT )
   ? "2 =>", pGT1

   pGT := hb_gtSelect( pGT1 )
   SetColor( "W+/R" )
   dispBox( 10, 10, 20, 50, B_DOUBLE + " " )
   ?? "This test is shown in 1-st GT window"

   hb_gtSelect( pGT2 )
   SetColor( "W+/B" )
   dispBox( 15, 30, 20, 70, B_DOUBLE + " " )
   ?? "This test is shown in 2-nd GT window"

   hb_gtSelect( pGT )
   ? "New console window should be visible now"
   wait

   ? "Destroy 1-st window..."
   pGT1 := NIL
   ?? "done"
   wait

   ? "Destroy 2-nd window..."
   pGT2 := NIL
   ?? "done"

   wait "Press any key to exit"

return

José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Multithread e multiplas janelas

Mensagem por fladimir »

E aí José conseguiu algo de novo?

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Multithread e multiplas janelas

Mensagem por JoséQuintas »

Por coincidência fiz uns testes hoje.
Como console as janelas abrem uma sobre a outra. Mas podem ser movidas, e com funcionamento independente, a ponto de dar erro em uma e em outra não ao fechar. (fechando uma janela, dá erro no inkey() dela, mas as outras continuam rodando).
Pra não permitir fechar a janela principal (na verdade pra não existir), compilei com a gtnul.
Só que dessa forma o programa principal fica zumbi, e precisa ser fechado no gerenciador de tarefas. (lógico, o programa está rodando, só não tem tela).

compilei com hbmk2 -mt -gtnul

Código: Selecionar todos

#ifdef __PLATFORM__WINDOWS
   REQUEST HB_GT_WVT_DEFAULT
   #define THREAD_GT "WVT"
#else
   REQUEST HB_GT_STD_DEFAULT
   #define THREAD_GT "XWC"
#endif

proc main()

HB_ThreadStart({||OneGt()})

   For nCont = 1 To 3
      Hb_ThreadStart( {||AnotherGt()} )
   Next
Inkey(1000)   
return

Function OneGt()

   ? "This is small test for using more then one console window."
   ? "It needs GT which supports such functionality i.e. GTWVT in"
   ? "MS-Windows or GTXWC in XWindow"
   wait "Main Window. Press any key to exit"
Return NIL

Function AnotherGT()
Local pGT, nCont
pGt := hb_gtCreate(THREAD_GT)
hb_gtSelect(pGt)
For nCont = 1 To 10
   ? pGt, nCont
Next
wait "Child. Press any key to exit"
Return NIL   
Talvez no programa principal criar um array de janelas abertas, e fechar quando o array estiver vazio.
Tô achando que a GTWVW seria a melhor de todas, mas não teve atualização nem ajuste pra Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Multithread e multiplas janelas

Mensagem por JoséQuintas »

Agora que me dei conta....
Alterando meu preview de relatórios usando multithread, vou ter o que tinha antes: opção de vários relatórios abertos.
Depois vou brincar com isso....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Multithread e multiplas janelas

Mensagem por sygecom »

Apenas para lembrar, isso só é possível com Harbour hoje, o xHarbour para MT é uma negação total.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Multithread e multiplas janelas

Mensagem por Abel »

Ola, estava tentando abrir a nova janela exibir o texto dentro dela mas manter a janela principal ativa e nao paralisada.

exemplo de uso.
o cara pede um help eu abro nova janela com as instrucoes e ele minimiza ou arrasta a nova janela e faz uso das funcoes q estao no help. Quando ele desejar fechar o HELP ele clica no X e a janela principal continua ativa.

fiz o seguinte:

procedure help()
local ntnovo, ntantigo

ntnovo := hb_gtcreate("WVT")
ntnantigo := hb_gtselect(ntnovo)

exibe_help()

hb_gtselect(ntantigo)
return nil


problemas que ocorrem:
- ele abre a segunda janela, mas a janela principal fica paralizada.
- quando fecho no X a segunda janela ele fecha a principal tambem.

sera que alguem sabe a solucao ?

Valeu,
ABEL
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Multithread e multiplas janelas

Mensagem por JoséQuintas »

A opção é usar multithread nessa janela de help, aí o help roda igual um EXE separado, pode até dar erro que não fecha o programa principal.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Multithread e multiplas janelas

Mensagem por Abel »

sem querer abusar,
como eu faco isso ?

"usar multithead"

Abracos,
ABEL
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Multithread e multiplas janelas

Mensagem por JoséQuintas »

Lembrando: vai funcionar como se fosse um EXE separado. A vantagem é não exigir uns 400kb para EXE separado.

No hbmk2 precisa acrescentar -mt

hb_ThreadStart( @FuncaoHelp(), cParametro)

Function FuncaoHelp(cParametro)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder