MAMP2 Posted April 22, 2020 Report Share Posted April 22, 2020 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? Quote Link to comment Share on other sites More sharing options...
emotta Posted April 22, 2020 Report Share Posted April 22, 2020 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. Quote Link to comment Share on other sites More sharing options...
MAMP2 Posted April 22, 2020 Author Report Share Posted April 22, 2020 bom dia emotta, voce diz pra eu enviar o programa?, se for isto segue ai o programa, mot_ve.prg Quote Link to comment Share on other sites More sharing options...
emotta Posted April 22, 2020 Report Share Posted April 22, 2020 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. Quote Link to comment Share on other sites More sharing options...
MAMP2 Posted April 22, 2020 Author Report Share Posted April 22, 2020 nao existe um techo em comum, quando chama ele a ja aloca 50% da memoria ram e nao solta mais. postei a esperanca de ter alguma coisa que possa ser feita na compilacao que pudesse "ajudar" neste uso indiscriminado da memoria RAM Quote Link to comment Share on other sites More sharing options...
emotta Posted April 22, 2020 Report Share Posted April 22, 2020 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. Quote Link to comment Share on other sites More sharing options...
MAMP2 Posted April 22, 2020 Author Report Share Posted April 22, 2020 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? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 22, 2020 Report Share Posted April 22, 2020 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] Quote Link to comment Share on other sites More sharing options...
gilmer Posted April 22, 2020 Report Share Posted April 22, 2020 Boa Tarde, Tente colocar mais sysrefresh() no whiles, normalmente isto acaba aumentando o consumo da máquina. Quote Link to comment Share on other sites More sharing options...
MAMP2 Posted April 22, 2020 Author Report Share Posted April 22, 2020 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. Quote Link to comment Share on other sites More sharing options...
MAMP2 Posted April 22, 2020 Author Report Share Posted April 22, 2020 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 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 22, 2020 Report Share Posted April 22, 2020 TODOS OS LOOPING. baixe meu exemplo e leia com calma. Este modos operandi, vai estourar a PILHA. Quote Link to comment Share on other sites More sharing options...
emotta Posted April 22, 2020 Report Share Posted April 22, 2020 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 ! Quote Link to comment Share on other sites More sharing options...
gilmer Posted April 23, 2020 Report Share Posted April 23, 2020 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.