Jump to content
Fivewin Brasil

executavel com menos memoria


MAMP2

Recommended Posts

bom dia Pessoal estou fazendo um programa bem pequeno, onde ele vai apenas verificar de minuto em minuto(underground)

a existencia de uma arquivo e se existir, executa uma funcao.

porem o executavel esta pequeno, mas ele quando entra ocupa metade da memoria ram do computador

tem algum meio deste consumo de memoria ram ser reduzido pra um programa simples?

 

Link to comment
Share on other sites

para analisar seria importante vc dizer qto de memoria ele está ocupando e postar o seu código para analise. O que pode estar acontecendo é você ter alguma string que dentro do seu laço segue acumulando informações, talvez vc tenha log no programa, etc.

Poste seu código simulando o problema pois com as informações que passou não vejo como ajuda-lo.

Link to comment
Share on other sites

Não consegui ver nada que chame a atenção para o seu problema. Achei o código bem complicado, você poderia limpar ele como por exemplo fazendo uma função generica para abrir a tabela ao invez de toda vez fazer um WHILE e criar um contador que fica tentando abrir a tabela. Mas aí é opinião apenas. No seu código não vi nada de errado.

Pra resolver eu faria o seguinte, seguiria comentando trechos do programa pra identificar o ponto que ocorre o aumento da memória e ai trabalharia naquele trecho.

 

Link to comment
Share on other sites

Faz o seguinte, comenta o fonte todo, deixe só um pequeno trecho e veja se aumenta. 

Se aumentar vc sabe que é ali que tem que trabalhar.

Se não aumentar vc "descomenta" um outro techo e verifica se aumenta.

Se aumentar vc sabe que é neste trecho que vc descomentou.

Se não aumentar vc segue repetindo este processo.

 

Link to comment
Share on other sites

nao estou entendedo emotta, o programa e super pequeno, so verifica a existencia de 3 arquivos e faz algum procedimento se o arquivo existir

e ele funciona sem tela no ar, fica undergrund rodando "tomando conta" da maquina e fazendo algumas coisas pra evitar que aconteça certos

procedimentos, a gente nao ve nada acontecer, nao entendo o que voce diz sobre comentar a fonte, nao tem como.

acredito que tenha que ser alguma coisa do tipo (na compilacao) pois eu fiz ele ate em clipper 5.3 o executavel dicou 100 vezes menor, mas

quando aciona ocupa 50% da memoria ram, entende?

 

 

Link to comment
Share on other sites

Veja depois de INDENTAR o seu programa, como eu o "enxergo". Fica fácil dar leitura. kapiabafwh@gmail.com


	//* Sistema de acompanhamento das rotinas externas do sistema Motel/Hotel


#include "FiveWin.ch"

FUNCTION espera()

   LOCAL cDcb, nBtytes, nError

   DECLARE ar_bin[256]

   ar_bin[001] := "00000001"
   ar_bin[002] := "00000010"
   ar_bin[003] := "00000011"
   ar_bin[004] := "00000100"
   ar_bin[005] := "00000101"
   ar_bin[006] := "00000110"
   ar_bin[007] := "00000111"
   ar_bin[008] := "00001000"
   ar_bin[009] := "00001001"
   ar_bin[010] := "00001010"
   ar_bin[011] := "00001011"
   ar_bin[012] := "00001100"
   ar_bin[013] := "00001101"
   ar_bin[014] := "00001110"
   ar_bin[015] := "00001111"
   ar_bin[016] := "00010000"
   ar_bin[017] := "00010001"
   ar_bin[018] := "00010010"
   ar_bin[019] := "00010011"
   ar_bin[020] := "00010100"
   ar_bin[021] := "00010101"
   ar_bin[022] := "00010110"
   ar_bin[023] := "00010111"
   ar_bin[024] := "00011000"
   ar_bin[025] := "00011001"
   ar_bin[026] := "00011010"
   ar_bin[027] := "00011011"
   ar_bin[028] := "00011100"
   ar_bin[029] := "00011101"
   ar_bin[030] := "00011110"
   ar_bin[031] := "00011111"
   ar_bin[032] := "00100000"
   ar_bin[033] := "00100001"
   ar_bin[034] := "00100010"
   ar_bin[035] := "00100011"
   ar_bin[036] := "00100100"
   ar_bin[037] := "00100101"
   ar_bin[038] := "00100110"
   ar_bin[039] := "00100111"
   ar_bin[040] := "00101000"
   ar_bin[041] := "00101001"
   ar_bin[042] := "00101010"
   ar_bin[043] := "00101011"
   ar_bin[044] := "00101100"
   ar_bin[045] := "00101101"
   ar_bin[046] := "00101110"
   ar_bin[047] := "00101111"
   ar_bin[048] := "00110000"
   ar_bin[049] := "00110001"
   ar_bin[050] := "00110010"
   ar_bin[051] := "00110011"
   ar_bin[052] := "00110100"
   ar_bin[053] := "00110101"
   ar_bin[054] := "00110110"
   ar_bin[055] := "00110111"
   ar_bin[056] := "00111000"
   ar_bin[057] := "00111001"
   ar_bin[058] := "00111010"
   ar_bin[059] := "00111011"
   ar_bin[060] := "00111100"
   ar_bin[061] := "00111101"
   ar_bin[062] := "00111110"
   ar_bin[063] := "00111111"
   ar_bin[064] := "01000000"
   ar_bin[065] := "01000001"
   ar_bin[066] := "01000010"
   ar_bin[067] := "01000011"
   ar_bin[068] := "01000100"
   ar_bin[069] := "01000101"
   ar_bin[070] := "01000110"
   ar_bin[071] := "01000111"
   ar_bin[072] := "01001000"
   ar_bin[073] := "01001001"
   ar_bin[074] := "01001010"
   ar_bin[075] := "01001011"
   ar_bin[076] := "01001100"
   ar_bin[077] := "01001101"
   ar_bin[078] := "01001110"
   ar_bin[079] := "01001111"
   ar_bin[080] := "01010000"
   ar_bin[081] := "01010001"
   ar_bin[082] := "01010010"
   ar_bin[083] := "01010011"
   ar_bin[084] := "01010100"
   ar_bin[085] := "01010101"
   ar_bin[086] := "01010110"
   ar_bin[087] := "01010111"
   ar_bin[088] := "01011000"
   ar_bin[089] := "01011001"
   ar_bin[090] := "01011010"
   ar_bin[091] := "01011011"
   ar_bin[092] := "01011100"
   ar_bin[093] := "01011101"
   ar_bin[094] := "01011110"
   ar_bin[095] := "01011111"
   ar_bin[096] := "01100000"
   ar_bin[097] := "01100001"
   ar_bin[098] := "01100010"
   ar_bin[099] := "01100011"
   ar_bin[100] := "01100100"
   ar_bin[101] := "01100101"
   ar_bin[102] := "01100110"
   ar_bin[103] := "01100111"
   ar_bin[104] := "01101000"
   ar_bin[105] := "01101001"
   ar_bin[106] := "01101010"
   ar_bin[107] := "01101011"
   ar_bin[108] := "01101100"
   ar_bin[109] := "01101101"
   ar_bin[110] := "01101110"
   ar_bin[111] := "01101111"
   ar_bin[112] := "01110000"
   ar_bin[113] := "01110001"
   ar_bin[114] := "01110010"
   ar_bin[115] := "01110011"
   ar_bin[116] := "01110100"
   ar_bin[117] := "01110101"
   ar_bin[118] := "01110110"
   ar_bin[119] := "01110111"
   ar_bin[120] := "01111000"
   ar_bin[121] := "01111001"
   ar_bin[122] := "01111010"
   ar_bin[123] := "01111011"
   ar_bin[124] := "01111100"
   ar_bin[125] := "01111101"
   ar_bin[126] := "01111110"
   ar_bin[127] := "01111111"
   ar_bin[128] := "10000000"
   ar_bin[129] := "10000001"
   ar_bin[130] := "10000010"
   ar_bin[131] := "10000011"
   ar_bin[132] := "10000100"
   ar_bin[133] := "10000101"
   ar_bin[134] := "10000110"
   ar_bin[135] := "10000111"
   ar_bin[136] := "10001000"
   ar_bin[137] := "10001001"
   ar_bin[138] := "10001010"
   ar_bin[139] := "10001011"
   ar_bin[140] := "10001100"
   ar_bin[141] := "10001101"
   ar_bin[142] := "10001110"
   ar_bin[143] := "10001111"
   ar_bin[144] := "10010000"
   ar_bin[145] := "10010001"
   ar_bin[146] := "10010010"
   ar_bin[147] := "10010011"
   ar_bin[148] := "10010100"
   ar_bin[149] := "10010101"
   ar_bin[150] := "10010110"
   ar_bin[151] := "10010111"
   ar_bin[152] := "10011000"
   ar_bin[153] := "10011001"
   ar_bin[154] := "10011010"
   ar_bin[155] := "10011011"
   ar_bin[156] := "10011100"
   ar_bin[157] := "10011101"
   ar_bin[158] := "10011110"
   ar_bin[159] := "10011111"
   ar_bin[160] := "10100000"
   ar_bin[161] := "10100001"
   ar_bin[162] := "10100010"
   ar_bin[163] := "10100011"
   ar_bin[164] := "10100100"
   ar_bin[165] := "10100101"
   ar_bin[166] := "10100110"
   ar_bin[167] := "10100111"
   ar_bin[168] := "10101000"
   ar_bin[169] := "10101001"
   ar_bin[170] := "10101010"
   ar_bin[171] := "10101011"
   ar_bin[172] := "10101100"
   ar_bin[173] := "10101101"
   ar_bin[174] := "10101110"
   ar_bin[175] := "10101111"
   ar_bin[176] := "10110000"
   ar_bin[177] := "10110001"
   ar_bin[178] := "10110010"
   ar_bin[179] := "10110011"
   ar_bin[180] := "10110100"
   ar_bin[181] := "10110101"
   ar_bin[182] := "10110110"
   ar_bin[183] := "10110111"
   ar_bin[184] := "10111000"
   ar_bin[185] := "10111001"
   ar_bin[186] := "10111010"
   ar_bin[187] := "10111011"
   ar_bin[188] := "10111100"
   ar_bin[189] := "10111101"
   ar_bin[190] := "10111110"
   ar_bin[191] := "10111111"
   ar_bin[192] := "11000000"
   ar_bin[193] := "11000001"
   ar_bin[194] := "11000010"
   ar_bin[195] := "11000011"
   ar_bin[196] := "11000100"
   ar_bin[197] := "11000101"
   ar_bin[198] := "11000110"
   ar_bin[199] := "11000111"
   ar_bin[200] := "11001000"
   ar_bin[201] := "11001001"
   ar_bin[202] := "11001010"
   ar_bin[203] := "11001011"
   ar_bin[204] := "11001100"
   ar_bin[205] := "11001101"
   ar_bin[206] := "11001110"
   ar_bin[207] := "11001111"
   ar_bin[208] := "11010000"
   ar_bin[209] := "11010001"
   ar_bin[210] := "11010010"
   ar_bin[211] := "11010011"
   ar_bin[212] := "11010100"
   ar_bin[213] := "11010101"
   ar_bin[214] := "11010110"
   ar_bin[215] := "11010111"
   ar_bin[216] := "11011000"
   ar_bin[217] := "11011001"
   ar_bin[218] := "11011010"
   ar_bin[219] := "11011011"
   ar_bin[220] := "11011100"
   ar_bin[221] := "11011101"
   ar_bin[222] := "11011110"
   ar_bin[223] := "11011111"
   ar_bin[224] := "11100000"
   ar_bin[225] := "11100001"
   ar_bin[226] := "11100010"
   ar_bin[227] := "11100011"
   ar_bin[228] := "11100100"
   ar_bin[229] := "11100101"
   ar_bin[230] := "11100110"
   ar_bin[231] := "11100111"
   ar_bin[232] := "11101000"
   ar_bin[233] := "11101001"
   ar_bin[234] := "11101010"
   ar_bin[235] := "11101011"
   ar_bin[236] := "11101100"
   ar_bin[237] := "11101101"
   ar_bin[238] := "11101110"
   ar_bin[239] := "11101111"
   ar_bin[240] := "11110000"
   ar_bin[241] := "11110001"
   ar_bin[242] := "11110010"
   ar_bin[243] := "11110011"
   ar_bin[244] := "11110100"
   ar_bin[245] := "11110101"
   ar_bin[246] := "11110110"
   ar_bin[247] := "11110111"
   ar_bin[248] := "11111000"
   ar_bin[249] := "11111001"
   ar_bin[250] := "11111010"
   ar_bin[251] := "11111011"
   ar_bin[252] := "11111100"
   ar_bin[253] := "11111101"
   ar_bin[254] := "11111110"
   ar_bin[255] := "11111111"
   ar_bin[256] := "00000000"

   te_est_net  := UPPER( subs( (netname() ) + space(30 ),1,30 ) )

   use_dir := alltrim( GETENV( "USERPROFILE" ) )

   te_est_use := memvar->use_dir + "\esta_mot.dbf"

   ve_use := '"' + te_est_use + '"'

   te_qt_vez := 0

   IF file( &ve_use )

      SELE 1

      WHILE .T.

         SYSREFRESH()

         // NAO FACA ISSO, ABRINDO O BANCO MILHOES DE VEZES, TIRE DAQUI O USE.
         // VAI ESTOURAR A PILHA. MODO ERRADO. MUDE TODOS OSE USES PARA FORA
         // DO LOOPING. MODO CERTO: USE UM SELECT()

         use &te_est_use READONLY ALIAS esta_1  // MUDE PARA FORA DO LOOPING.

         //* verifica se o arquivo esta sendo usado por outro usuario

         IF .NOT.  neterr()

            EXIT

         ELSE

            msgwait( "Arquivo estacao em uso", "Tela de Informacao", 0.01 )  // sem acentuação?

            IF memvar->te_qt_vez >= 10

               EXIT

            ENDIF

            memvar->te_qt_vez += 1

         ENDIF

      ENDDO

      memvar->te_depart  = esta_1->es_depart
      memvar->te_se_ent  = subs( esta_1->es_dri_red, 70, 1 )
      memvar->te_se_sai  = subs( esta_1->es_dri_red, 71, 1 )
      memvar->te_tem_sen = subs( esta_1->es_cor, 2, 1 )
      memvar->te_com_ent = subs( esta_1->es_dri_red, 132, 4 )
      memvar->te_com_sai = subs( esta_1->es_dri_red, 136, 4 )

      CLOSE

   ELSE

      // FreeResources()
      Release All
      SysRefresh()

      HB_GCALL( .T. )
      CLEAR MEMORY

      PostQuitMessage( 0 )

      QUIT

   ENDIF

   nome_raiz = '"' + "c:\onde.dbf" + '"'

   IF "VISTA" $ upper( memvar->te_est_net )
      ax_mat2   = "c:\mot\onde.dbf"
      nome_raiz = "c:\mot\onde.dbf"
   ENDIF

   IF "ESCRITORIO" $ upper( memvar->te_est_net )
      ax_mat2   = "c:\mot\onde.dbf"
      nome_raiz = "c:\mot\onde.dbf"
   ENDIF

   IF "CUPOM" $ upper( memvar->te_est_net )
      ax_mat2   = "c:\mot\onde.dbf"
      nome_raiz = "c:\mot\onde.dbf"
   ENDIF

   IF "RECEPCAO" $ upper( memvar->te_est_net )
      ax_mat2   = "c:\mot\onde.dbf"
      nome_raiz = "c:\mot\onde.dbf"
   ENDIF

   SELE 1

   WHILE .T.

      SYSREFRESH()

      // NAO FACA ISSO, ABRINDO O BANCO MILHOES DE VEZES, TIRE DAQUI O USE.
      // VAI ESTOURAR A PILHA. MODO ERRADO.
      // USE UM SELECT()

      use &nome_raiz READONLY ALIAS ond

      //
      //* verifica se o arquivo esta sendo usado por outro usuario
      //

      IF .NOT.  neterr()

         EXIT

      ELSE

         msgwait( "Arquivo localizacao em uso", "Tela de Informacao", 0.01 )

         IF memvar->te_qt_vez >= 10
            EXIT
         ENDIF

         memvar->te_qt_vez += 1

      ENDIF

   ENDDO

   memvar->te_drive = alltrim( ond->od_drive )

   CLOSE

   te_arq_tab = alltrim( memvar->te_drive ) + "\TABELA.DBF"

   SELE 1

   WHILE .T.

      SYSREFRESH()

      // NAO FACA ISSO, ABRINDO O BANCO MILHOES DE VEZES, TIRE DAQUI O USE.
      // VAI ESTOURAR A PILHA. MODO ERRADO.
      // USE UM SELECT()

      use &te_arq_tab READONLY ALIAS tab

      //
      //* verifica se o arquivo esta sendo usado por outro usuario
      //
      IF .NOT.  neterr()

         EXIT

      ELSE

         msgwait( "Arquivo tabela em uso 1", "Tela de Informacao", 0.01 )

         IF memvar->te_qt_vez >= 10
            EXIT
         ENDIF

         memvar->te_qt_vez += 1

      ENDIF

   ENDDO

   memvar->nome_esc = subs( tab->tb_firma, 1, 30 )

   CLOSE

   te_est_ver = memvar->use_dir + "\mot_ve.dbf"

   ve_use = '"' + te_est_ver + '"'

   IF file( &ve_use )

      //*\ ignore

   ELSE

      COPY file &te_est_use to &te_est_ver

   ENDIF

   SELE 1

   WHILE .T.

      SYSREFRESH()

      // NAO FACA ISSO, ABRINDO O BANCO MILHOES DE VEZES, TIRE DAQUI O USE.
      // VAI ESTOURAR A PILHA. MODO ERRADO.
      // USE UM SELECT()

      use &te_est_ver exclusive

      //
      //* verifica se o arquivo esta sendo usado por outro usuario
      //
      IF .NOT.  neterr()

         EXIT

      ELSE

         // FreeResources()
         Release All
         SysRefresh()

         HB_GCALL( .T. )
         CLEAR MEMORY

         PostQuitMessage( 0 )

         QUIT

      ENDIF

   ENDDO

   DECLARE ar_nome[9]
   DECLARE ar_size[9]
   DECLARE ar_data[9]
   DECLARE ar_hora[9]

   memvar->te_qt_passa = 0
   memvar->te_abri_por = "N"
   memvar->te_abriu    = "N"
   memvar->te_fechado  = " "

   WHILE .T.

      SYSREFRESH()

      // syswait( 1 )  // ATRASA PORQUE?

      memvar->te_qt_passa += 1

      IF memvar->te_qt_passa >= 60

         memvar->te_qt_passa = 0

         IF ISEXERUNNING( "MOT999.EXE" )

            IF "SEGURANCA" $ memvar->te_depart

               IF file( "c:\mot\dt_cupom.set" )

                  arq_cupom = '"' + "c:\mot\dt_cupom.set" + '"'

                  adir( &arq_cupom, ar_nome, ar_size, ar_data, ar_hora )

                  ax_data = ar_data[1]

                  ax_hh = val( subs( ar_hora[1],1,2 ) )

                  ax_mm = val( subs( ar_hora[1],4,2 ) )

                  ax_mm += 10

                  IF ax_mm > 59

                     ax_mm = ax_mm - 60

                     ax_hh += 1

                     IF ax_hh > 23

                        ax_hh = 0

                        ax_data += 1

                     ENDIF

                  ENDIF

                  ax_dez = dtos( ax_data ) + strzero( ax_hh, 2 ) + strzero( ax_mm, 2 )

                  ax_hora = dtos( date() ) + subs( time(), 1, 2 ) + subs( time(), 4, 2 )

                  IF ax_dez < ax_hora

                     te_da_task = '"' + "taskkill /F /IM mot999.exe /T" + '"'

                     winexec ( &te_da_task , 6 )

                  ENDIF

               ENDIF

            ENDIF

         ENDIF

      ENDIF

      IF memvar->te_se_ent = "S"

         IF memvar->te_abri_por = "N"

            nComm2 = OpenComm( memvar->te_com_ent, 1024, 128 )

            IF .NOT.  BuildCommDcb( memvar->te_com_ent + ":9600,N,8,1", @cDcb )

               memvar->te_abriu = "N"

               nError = GetCommError( nComm2 )

               CloseComm( nComm2 )

            ELSE

               memvar->te_abri_por = "S"

               memvar->te_abriu = "S"

            ENDIF

         ENDIF

         cBuffer = space( 01 )

         ax_vai_sen = "L"

         IF ( nBytes = WriteComm( nComm2, ax_vai_sen ) ) < 0

            nError = GetCommError( nComm2 )

            CloseComm( nComm2 )

            memvar->te_olha_com = "N"

            memvar->te_abri_por = "N"

            memvar->te_gravou = "N"

         ELSE

            memvar->te_gravou = "S"

         ENDIF

         IF te_gravou = "S"

            ReadComm( nComm2, @cBuffer )

            memvar->te_ret_ent = alltrim( cBuffer )

         ELSE

            memvar->te_ret_ent = "N"

         ENDIF

         IF memvar->te_ret_ent = "L"

            te_fechado = "S"

            arq_vai = fcreate( "c:\sensor\fechado.on", 0 )

            memvar->linha_gra = "F"

            fwrite( arq_vai, memvar->linha_gra )

            fclose( arq_vai )

         ELSE

            IF memvar->te_fechado = "S"

               te_fechado = "N"

            ENDIF

            IF memvar->te_fechado = "N"

               DELETE file "c:\sensor\fechado.on"

               arq_vai = fcreate( "c:\sensor\entrada.on", 0 )

               memvar->linha_gra = "F"

               fwrite( arq_vai, memvar->linha_gra )

               fclose( arq_vai )

               SET CENTURY ON

               ax_dt_sensor = dtoc( date() )

               ax_dt_sensor = subs( ax_dt_sensor, 1, 2 ) + subs( ax_dt_sensor, 4, 2 ) + subs( ax_dt_sensor, 9, 2 )

               ax_hr_sensor = subs( time(), 1, 2 ) + subs( time(), 4, 2 ) + subs( time(), 7, 2 )

               SET CENTURY OFF

               memvar->ax_vai_ent = ax_dt_sensor + ax_hr_sensor + chr( 13 ) + chr( 10 )

               te_arq_vai = "C:\SENSOR\ENTRADA.TXT"
               te_arq_va2 = '"' + te_arq_vai + '"'

               IF file( &te_arq_va2 )

                  arq_vai = fopen( te_arq_vai, 0 )

                  memvar->qt_letra = 2000

                  linha_ler = space( memvar->qt_letra )

                  memvar->te_bt_lido = fread( arq_vai, @linha_ler, memvar->qt_letra )
    
                  linha_tot = alltrim( linha_ler ) + memvar->ax_vai_ent
     
                  fclose( arq_vai )

                  arq_vai = fcreate( memvar->te_arq_vai, 0 )

               ELSE

                  arq_vai = fcreate( memvar->te_arq_vai, 0 )

                  linha_tot = memvar->ax_vai_ent

               ENDIF

               memvar->linha_gra = linha_tot

               fwrite( arq_vai, memvar->linha_gra )

               fclose( arq_vai )

               te_fechado = " "

               DELETE file "c:\sensor\entrada.on"

               FlushComm( nComm2, 1 )

            ENDIF

         ENDIF

      ENDIF

      IF memvar->te_tem_sen = "S"

         te_nm_dir = '"' + "C:\SENSOR\ENTRADA.COM?" + '"'

         aDir = DIRECTORY( &te_nm_dir, "D" )

         IF len( aDir ) = 0

            //*\ ignore

         ELSE

            afill( ar_nome, space( 08 ), 1, 9 )

            adir( &te_nm_dir, ar_nome, ar_size, ar_data, ar_hora )

            FOR ind_ent = 1 TO 9

               IF ar_nome[ind_ent] = space( 08 )
                  EXIT
               ENDIF

               te_arq_ve = "C:\SENSOR\" + ar_nome[ind_ent]

               liga_porta()

            NEXT

         ENDIF

      ENDIF

   ENDDO

RETURN nil

FUNCTION liga_porta()

   LOCAL cDcb, nBtytes
   LOCAL nError

   memvar->te_porta = subs( memvar->te_arq_ve, 19, 4 )

   arq_ctr = fopen( te_arq_ve, 0 )

   memvar->qt_letra = 100

   linha_ler = space( memvar->qt_letra )

   memvar->te_bt_lido = fread( memvar->arq_ctr, @linha_ler, memvar->qt_letra )

   te_ali = alltrim( linha_ler )

   fclose( arq_ctr )

   memvar->te_chrt = te_ali + "111"

   memvar->ax_chr1 = subs( memvar->te_chrt, 1, 8 )
   memvar->ax_chr2 = subs( memvar->te_chrt, 9, 8 )
   memvar->ax_chr3 = subs( memvar->te_chrt, 17, 8 )

   IF "VENEZA" $ memvar->nome_esc

      ax_1 = subs( ax_chr3, 1, 1 )
      ax_2 = subs( ax_chr3, 2, 1 )
      ax_3 = subs( ax_chr3, 3, 1 )
      ax_4 = subs( ax_chr3, 4, 1 )
      ax_5 = subs( ax_chr3, 5, 1 )
      ax_6 = subs( ax_chr3, 6, 1 )
      ax_7 = subs( ax_chr3, 7, 1 )
      ax_8 = subs( ax_chr3, 8, 1 )

      IF ax_3 + ax_4 = "00"
         ax_1 = "0"
         ax_2 = "0"
         ax_3 = "0"
         ax_4 = "0"
      ELSE
         IF ax_1 = "0"
            ax_3 = "0"
         ELSE
            IF ax_1 = "1"
               ax_3 = "1"
            ENDIF
         ENDIF
         IF ax_2 = "0"
            ax_4 = "0"
         ELSE
            IF ax_2 = "1"
               ax_4 = "1"
            ENDIF
         ENDIF
      ENDIF

      memvar->ax_chr3 = ax_1 + ax_2 + ax_3 + ax_4 + ax_5 + ax_6 + ax_7 + ax_8

   ENDIF

   memvar->ax_chr4 = subs( memvar->te_chrt, 25, 8 )
   memvar->ax_chr5 = subs( memvar->te_chrt, 33, 8 )
   memvar->ax_chr6 = subs( memvar->te_chrt, 41, 8 )

   memvar->te_chr1 = ""
   memvar->te_chr2 = ""
   memvar->te_chr3 = ""
   memvar->te_chr4 = ""
   memvar->te_chr5 = ""
   memvar->te_chr6 = ""

   FOR ind_inv = 8 TO 1 step - 1
      memvar->te_chr1 += subs( memvar->ax_chr1, ind_inv, 1 )
   NEXT

   FOR ind_inv = 8 TO 1 step - 1
      memvar->te_chr2 += subs( memvar->ax_chr2, ind_inv, 1 )
   NEXT

   FOR ind_inv = 8 TO 1 step - 1
      memvar->te_chr3 += subs( memvar->ax_chr3, ind_inv, 1 )
   NEXT

   FOR ind_inv = 8 TO 1 step - 1
      memvar->te_chr4 += subs( memvar->ax_chr4, ind_inv, 1 )
   NEXT

   FOR ind_inv = 8 TO 1 step - 1
      memvar->te_chr5 += subs( memvar->ax_chr5, ind_inv, 1 )
   NEXT

   FOR ind_inv = 8 TO 1 step - 1
      memvar->te_chr6 += subs( memvar->ax_chr6, ind_inv, 1 )
   NEXT

   nComm = OpenComm( alltrim( te_porta ), 1024, 128 )

   IF .NOT.  BuildCommDcb( alltrim( te_porta ) + ":9600,n,8,1", @cDcb )

      RETURN ( .T. )

   ENDIF

   IF SetCommState( nComm, cDcb )

      memvar->te_err_ser = 0
      memvar->te_err_dat = space( 30 )
      memvar->te_ene_at = "S"

   ELSE

      nError = GetCommError( nComm )
      CloseComm( nComm )

      RETURN ( .T. )

   ENDIF

   FOR ind_bt = 1 TO 256

      SYSREFRESH()

      IF ar_bin[ind_bt] = memvar->te_chr1
         te_chr1 = ind_bt
         EXIT
      ENDIF

   NEXT

   FOR ind_bt = 1 TO 256

      SYSREFRESH()

      IF ar_bin[ind_bt] = memvar->te_chr2
         te_chr2 = ind_bt
         EXIT
      ENDIF

   NEXT
   FOR ind_bt = 1 TO 256

      SYSREFRESH()

      IF ar_bin[ind_bt] = memvar->te_chr3
         te_chr3 = ind_bt
         EXIT
      ENDIF

   NEXT

   FOR ind_bt = 1 TO 256

      SYSREFRESH()

      IF ar_bin[ind_bt] = memvar->te_chr4
         te_chr4 = ind_bt
         EXIT
      ENDIF

   NEXT

   FOR ind_bt = 1 TO 256

      SYSREFRESH()

      IF ar_bin[ind_bt] = memvar->te_chr5
         te_chr5 = ind_bt
         EXIT
      ENDIF

   NEXT

   FOR ind_bt = 1 TO 256

      SYSREFRESH()

      IF ar_bin[ind_bt] = memvar->te_chr6
         te_chr6 = ind_bt
         EXIT
      ENDIF

   NEXT

   IF te_chr1 = 256
      te_chr1 = 0
   ENDIF

   IF te_chr2 = 256
      te_chr2 = 0
   ENDIF

   IF te_chr3 = 256
      te_chr3 = 0
   ENDIF

   IF te_chr4 = 256
      te_chr4 = 0
   ENDIF

   IF te_chr5 = 256
      te_chr5 = 0
   ENDIF
   IF te_chr6 = 256
      te_chr6 = 0
   ENDIF

   IF ( nBytes = WriteComm( nComm, chr(0 ) + chr(te_chr1 ) + chr(te_chr2 ) + chr(te_chr3 ) + chr(te_chr4 ) + chr(te_chr5 ) + chr(te_chr6 ) ) ) < 0
      nError = GetCommError( nComm )
      CloseComm( nComm )
      RETURN ( .T. )
   ELSE
      memvar->te_err_ser = 0
      memvar->te_err_dat = space( 30 )
      memvar->te_ene_at = "S"
   ENDIF

   IF .NOT. CloseComm( nComm )
      nError = GetCommError( nComm )
   ELSE
      memvar->te_err_ser = 0
      memvar->te_err_dat = space( 30 )
      memvar->te_ene_at = "S"
   ENDIF

   DELETE file &te_arq_ve

RETURN ( .T. )

// FIM - PROGRAMA IDENTADO E OUTRO NIVEL DE LEITURA.
[/code]
 

Link to comment
Share on other sites

oi kapiaba, obrigado pela ajuda.

mas:

o use é usado só uma vez, ele abre o arquivo (só uma vez) o loop é só pra evitar que de erro, mas nao fica em loop, sai na primeira abertura

dentro do loop principal, que fica verificando a existencia dos 3 arquivos, nao tem abertura nenhuma de arquivo, os arquivos de parametros

sao abertos no começo, sao fechados e depois o looping principal fica verificando a existencia dos arquivos (os 3) pra fazer os procedimentos necessarios

quando ao siswait(1), é só pra ele verificar de 1 em 1 segundo pois o programa que gera, só gera de um em um segundo tambem.

o programa fica "preso" no loopping principal.

 

 

Link to comment
Share on other sites

 

nao estou entendedo emotta, o programa e super pequeno, so verifica a existencia de 3 arquivos e faz algum procedimento se o arquivo existir

e ele funciona sem tela no ar, fica undergrund rodando "tomando conta" da maquina e fazendo algumas coisas pra evitar que aconteça certos

procedimentos, a gente nao ve nada acontecer, nao entendo o que voce diz sobre comentar a fonte, nao tem como.

acredito que tenha que ser alguma coisa do tipo (na compilacao) pois eu fiz ele ate em clipper 5.3 o executavel dicou 100 vezes menor, mas

quando aciona ocupa 50% da memoria ram, entende?

 

 

Vamos la, vou tentar te explicar:

Vc precisa primeiro descobrir o local no seu programa que está alocando esta memória toda. Então quando falei pra vc comentar trechos do código é exatamente pra descobrir o local no código e descobrindo o local da pra trabalhar em cima.

Então eu faria o seguinte: Comentaria praticamente o programa todo, só deixando um MSGSTOP("FIM") na parte final da função e ao chamar veria se aloca toda essa memoria. Provavelmente não vai alocar, aí eu vou "descomentando" outras partes, aos poucos, e fazendo o mesmo e verificando se alocou ou não toda essa memoria. Quando eu descomentar um trecho e alocar essa quantidade de memoria eu saberei exatamente o trecho que está alocando essa quantidade toda de memoria e ai trabalho somente em cima deste trecho de código.

Eu seguiria essa lógica pra resolver o problema, fica como sugestão.

 

Abraços boa sorte !

Link to comment
Share on other sites

 

oi gilmer, obrigado pela atencao

mas o sysrefresh() colocar em que looping? no looping da abertura do arquivo?, nao faz sentido, ele só passa la uma vez quando entra

 

O Sysrefresh libera os eventos para o Windows, quando você usa um while ele segura a máquina não permitindo o windows ter informações ou eventos sobre seu aplicativo.

 

Maiores informações na documentação do FiveWin

http://wiki.fivetechsoft.com/doku.php?id=fivewin_funcion_sysrefresh

 

Obs. Não olhei seu código para analisar onde esta sendo usado os LOOPS e como.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...