Quantcast
Channel: WinDev Forum
Viewing all articles
Browse latest Browse all 1914

WD22 - Thread Freeze program - Help me (1 reply)

$
0
0
Hi all,
i need your help.

In my application i have a this procedure:

PROCEDURE ProcessoSilente()
//Procedura nata per gestire tutti i processi silenti in WiNeMo
// I processi gestiti sono:
//1 - Controllo Utente
//2 - Invio E-Mail
//3 - StatisticheEmail
//4 - Statistiche CRM
//5 - StatisticheVarie
//6 - Statistiche WElectroCom


DataOggi is Date = DateSys()
OraOggi is Time = TimeSys()

arrElencoTaskParalleli is array of ParallelTask

parte_alfa,Causale,tipo_documento is string

nConteggioEsecuzioneProcedura is numeric = 0


WHILE True
	nConteggioEsecuzioneProcedura++
	// 1 - Controllo utente: Serve per gestire il corretto uso degli utenti in WiNeMo
	
	IF InTestMode() THEN Trace("Controllo connsessione utente " + gsUtente )
	ora is numeric = TimeSys()
	IF gsUtente<>"" THEN
		
		HReadSeekFirst(Utenti,UT_NOME,gsUtente,hLockNo)
		IF HFound(Utenti) THEN
			Utenti.UT_CTRL=ora
			HModify(Utenti)
		ELSE
			DelayBeforeClosing(2000)
			Error("Manomissione controllo utente. Il programma verrà terminato!")
			EndProgram()
		END
	ELSE
		IF InTestMode() THEN Trace("ERRORE CONTROLLO UTENTE")
	END
	
	//--------------------------------------------------------------------------------------------------------------
	
	// 2 - Invio E-Mail: Controlla tutte le e-mail che l'utente ha in queue in questo momento e le invia
	
	FOR i = 1 TO ArrayCount(arrElencoTaskParalleli)
		IF arrElencoTaskParalleli.Completed=True THEN
			ArrayDelete(arrElencoTaskParalleli,i)
		END
	END
	
	IF ArrayCount(arrElencoTaskParalleli)=0 AND DecimalPart(nConteggioEsecuzioneProcedura/3)=0 THEN
		DataOggi = DateSys()
		OraOggi  = TimeSys()
		HReadSeekFirst(azienda,azie_key,gsAzienda)
		HReadSeekFirst(utentia,Uten_key,gsUtente)
		HReadSeekFirst(accountmail,Am_Id,utentia.uten_id_mail)
		
		IF InTestMode() THEN
			Trace("Controllo MAIL")
		END
		
		
		IF HExecuteQuery(QRY_SelezionaQueueMailDaInviare,hQueryDefault,DataOggi,OraOggi,gsUtente) THEN
			HReadFirst(QRY_SelezionaQueueMailDaInviare)
			WHILE NOT HOut(QRY_SelezionaQueueMailDaInviare)
				
				let t = ParallelTaskExecute(COL_Queue.InvioEmailInQueueSingolo,(QRY_SelezionaQueueMailDaInviare.QM_ID),ptoFullCopyHFSQLContext)
				Add(arrElencoTaskParalleli,t)
				
				HReadNext(QRY_SelezionaQueueMailDaInviare)
			END
		END	
	END	
	IF InTestMode() THEN Trace(""+ArrayCount(arrElencoTaskParalleli))

	//--------------------------------------------------------------------------------------------------------------
	
	
	//3 - StatisticheEmail
	IF HExecuteQuery(QRY_CountEmailInQueue,hQueryDefault,gsUtente,gsAzienda) THEN
		HReadFirst(QRY_CountEmailInQueue)
		IF HFound(QRY_CountEmailInQueue) THEN
			nEmMailInInvio=QRY_CountEmailInQueue.Count_1
		ELSE
			nEmMailInInvio=0
		END
	END
	
	IF HExecuteQuery(QRY_CountMailInErrore,hQueryDefault,gsUtente,gsAzienda) THEN
		HReadFirst(QRY_CountMailInErrore)
		IF HFound(QRY_CountMailInErrore) THEN
			nEmailInErrore=QRY_CountMailInErrore.Count_1
		ELSE
			nEmailInErrore=0
		END
	END
	IF HExecuteQuery(QRY_CountEmailInQueueTutti,hQueryDefault,gsAzienda) THEN
		HReadFirst(QRY_CountEmailInQueueTutti)
		IF HFound(QRY_CountEmailInQueueTutti) THEN
			nEmailInvioTuttiUtenti=QRY_CountEmailInQueueTutti.Count_1
		ELSE
			nEmailInvioTuttiUtenti=0
		END
	END
	IF HExecuteQuery(QRY_CountMailInErroreTutti,hQueryDefault,gsAzienda) THEN
		HReadFirst(QRY_CountMailInErroreTutti)
		IF HFound(QRY_CountMailInErroreTutti) THEN
			nEmailErroreTuttiUtenti=QRY_CountMailInErroreTutti.Count_1
		ELSE
			nEmailErroreTuttiUtenti=0
		END
	END
	
	//--------------------------------------------------------------------------------------------------------------
	
	
	//4 - Statistiche CRM
	IF InTestMode() THEN Trace("STATISTICHE CRM")
	HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,0,Null)
	HReadFirst(QRY_StatisticheCRM)
	gxAttivitaAperteTot=QRY_StatisticheCRM.Count_1
	
	
	HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,1,Null)
	HReadFirst(QRY_StatisticheCRM)
	gxAttivitaChiuseTot=QRY_StatisticheCRM.Count_1
	
	
	
	HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,0,gsUtente)
	HReadFirst(QRY_StatisticheCRM)
	gxAttivitaAperteUtente=QRY_StatisticheCRM.Count_1
	
	HExecuteQuery(QRY_StatisticheCRM,hQueryDefault,gsAzienda,1,gsUtente)
	HReadFirst(QRY_StatisticheCRM)
	gxAttivitaChiuseUtente=QRY_StatisticheCRM.Count_1
	
	HExecuteQuery(QRY_CRM_Cerca_fra2_date,hQueryDefault,gsAzienda,Null,Null,gsUtente)
	HReadFirst(QRY_CRM_Cerca_fra2_date)
	WHILE NOT HOut(QRY_CRM_Cerca_fra2_date)
		IF QRY_CRM_Cerca_fra2_date.FlChiuso=0 THEN 
			ArrayAdd(garrElencoAttivitaAperteUtente,QRY_CRM_Cerca_fra2_date.Descrizione+" - "+ QRY_CRM_Cerca_fra2_date.Note)
		END
		HReadNext(QRY_CRM_Cerca_fra2_date)
	END
	
	//--------------------------------------------------------------------------------------------------------------
	
	
	//5 - StatisticheVarie
	IF InTestMode() THEN Trace("Calcolo ricavo/Calcolo cestino")
	IF NOT HExecuteQuery(QRY_Venduto_Totale_Da_A,WiNeMo_connection,hQueryWithoutCorrection,DateSys(),DateSys(),"'"+gsAzienda+"'") THEN
		IF InTestMode() THEN Trace("ERRORE ESECUZIONE")
	END
	HReadFirst(QRY_Venduto_Totale_Da_A)
	gxRicavoGiornaliero=QRY_Venduto_Totale_Da_A.Venduto-QRY_Venduto_Totale_Da_A.CostoVenduto
	
	HExecuteQuery(QRY_Conta_TRASH,hQueryDefault,gsAzienda)
	HReadFirst(QRY_Conta_TRASH)
	gxNumDocumentiCestinati=QRY_Conta_TRASH.Count_1	
	
	//--------------------------------------------------------------------------------------------------------------

	//6 - Statistiche WElectroCom
	IF DecimalPart(nConteggioEsecuzioneProcedura/6)=0 THEN
	
		IF InTestMode() THEN Trace("Controllo Ordini WElectroComm")
		
		
		HReadSeekFirst(webparameter,wbp_Tipo,"CONF_ALFA")
		IF HFound THEN
			parte_alfa=webparameter.wbp_Valore
		END
		
		HReadSeekFirst(webparameter,wbp_Tipo,"CONF_CAUSALE")
		IF HFound THEN
			Causale=webparameter.wbp_Valore
		END
		
		HReadSeekFirst(webparameter,wbp_Tipo,"CONF_TIPDOC_WEB")
		IF HFound THEN
			tipo_documento=webparameter.wbp_Valore
		END
		
		HExecuteQuery(QRY_SelezionaOrdiniWElectroComm,hQueryDefault,tipo_documento,parte_alfa,Causale)
		HReadFirst(QRY_SelezionaOrdiniWElectroComm)
		IF HFound(QRY_SelezionaOrdiniWElectroComm) THEN
			gxNumOrdiniWEletrocom=QRY_SelezionaOrdiniWElectroComm.Count_1
		ELSE
			gxNumOrdiniWEletrocom=0
		END
	END
	//--------------------------------------------------------------------------------------------------------------
	CriticalSectionStart()
	ExecuteMainThread(WIN_Menu_winemo.DoUpadateDashboard)
	CriticalSectionEnd()
	
	IF gbFl_Exit_Processo_silente=True THEN
		BREAK
	END
	
	ThreadPause(500)	
END


This procedure is performed with this thread, after a logon user:

				ThreadExecute("ProcessoSilente",threadFullCopyHFSQLContext,Utility.ProcessoSilente)

The "ExecuteMainThread(WIN_Menu_winemo.DoUpadateDashboard)" perform this procedure:

PROCEDURE DoUpadateDashboard()
DashDisplay(DASH_NoName1,IW_Cestino)
DashDisplay(DASH_NoName1,IW_CostoGiornaliero_New)
DashDisplay(WIN_Menu_winemo.DASH_NoName1,IW_CRM)
DashDisplay(WIN_Menu_winemo.DASH_NoName1,IW_WSendMail_New)
DashDisplay(DASH_NoName1,IW_WElectroComm_New)


In same case the program Freeze and i dont understand why.

I'm going crazy.

Viewing all articles
Browse latest Browse all 1914

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>