none
le backgroundWorker présent ou pas RRS feed

  • Question

  • Je suis toujours à rechercher une solution pour les désallocations de mémoire.

    J'ai essayé de créer deux thread qui se succéderaient.

    J'ai donc créer deux backgroundWorker; Je vous met ci-dessous la déclaration.

    public:
    		MainMenue::MainMenue(void);
    		System::ComponentModel::BackgroundWorker^  backgroundWorker1;
    		System::ComponentModel::BackgroundWorker^  backgroundWorker2;

    et j'ai reproduit l'appel du premier dans WordManager. Je donne ci dessous le code:

    				backgroundWorker1->ReportProgress( ProgressPercentage);
    				objVirtualEquations.CheckVirtualEquations( pListSegment);
    				CloseDocument( backgroundWorker1, objApplication, objDocument, objDocuments);
    				objSchedulerGlobal.ClearListGrammaire( pListSegment);
    				backgroundWorker2->ReportProgress( ProgressPercentage);
    

    mais le compilateur me dit qu'il ne trouve pas backgroundWordker2

    1>..\..\..\..\Linguistic\WordReader\src\WordManager.cpp(361): error C2065: 'backgroundWorker2' : identificateur non déclaré
    1>..\..\..\..\Linguistic\WordReader\src\WordManager.cpp(361): error C2227: la partie gauche de '->ReportProgress' doit pointer vers un type class/struct/union/générique
    1>          le type est ''unknown-type''

    Comment faire pour qu'il le trouve?


    Jean Noël Martin

    mercredi 30 octobre 2013 12:34

Réponses

  • J'essaye toutes les pistes sur la base des comportements que j'ai observé:

    - Je sais que je désalloue les ressources en fin de 1° phase;

    - Je sais que je peux enchainer six itérations du programme sans l’arrêter.

    De ces deux observations je conclue que les désallocations se passent bien.

    - J'ai observé que le tas est toujours alloué après les désallocations;

    - Mais lorsqu'on met l'observatoire du tas dans le main il n'y a rien d'alloué.

    J'ai donc supprimé le deuxième backgroundWorker

    Pour cela j'ai organisé la remonté de l’observatoire du tas dans le MainMenue:

    Pour suivre votre demande je met cette classe à votre disposition ainsi que sa déclaration.la déclaration

    #pragma once
    
    namespace SpecificationLoader
    {
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	
    	namespace Word = Microsoft::Office::Interop::Word;
    	
    	/// Description résumée de MainMenue
    	public ref class MainMenue : public System::Windows::Forms::Form
    	{
    	public:
    		MainMenue::MainMenue(void);
    		System::ComponentModel::BackgroundWorker^  backgroundWorker1;
    		static SpecificationLoader::CWManager^ objWordManager;
    	private: 
    		System::Windows::Forms::Label^  label1;
    		System::Windows::Forms::Label^  label2;
    		System::Windows::Forms::Label^  label3;
    		System::Windows::Forms::Label^  label4;
    		System::Windows::Forms::Label^  label6;
    		System::Windows::Forms::Label^  label7;
    	
    	protected:
    		/// Nettoyage des ressources utilisées.
    		MainMenue::~MainMenue();
    
    	private:
    		int numberToCompute;
    		int highestPercentageReached;
    		System::Windows::Forms::MenuStrip^  menuStrip1;
    		System::Windows::Forms::ToolStripMenuItem^  filesToolStripMenuItem;
    		System::Windows::Forms::ToolStripMenuItem^  openAFileToolStripMenuItem;
    		System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;
    		System::Windows::Forms::ToolStripMenuItem^  helpToolStripMenuItem;
    		System::Windows::Forms::Label^  ResultLabel;
    		System::Windows::Forms::ProgressBar^  progressBar1;
    		System::ComponentModel::Container ^components;
    		void MainMenue::InitializeComponent(void);
    		System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e);
    		System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e);
    		System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e);
    		void MainMenue::InitializeProgressBar();
    		void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e);
    		void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e);
    		System::Void MainMenue::backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e);
    		void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e);
    		System::Void MainMenue::backgroundWorker2_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e);
    	private: System::Void oadingSpecification(System::Object^  sender, System::EventArgs^  e) {
    			 }
    	};
    }

    et le bloc de code avec les observatoires

    #pragma managed 
    #include "StdAfx.h"
    #include "Macro.h"
    #include "AlignStructure.h"
    #include "Enumerations.hpp"
    #include "Structure.h"
    #include "TypeDefs.hpp"
    #include "POS.h"
    #include "Layout.h"
    #include "ClassesAligner.hpp"
    #include "LinkDescription.h"
    #include "Manager.h"
    #include "Aligner.h"
    #include "WordManager.h"
    #include "OpenAFile.h"
    #include "MainMenue.h"
    
    extern std::wstring wsFileToOpen;
    extern std::wstring wsPathOfTheFile;
    extern std::wstring wsDiskOfTheFile;
    extern std::wstring wsLanguage;
    extern std::wstring wsTypeDocument;
    extern std::wstring wsDatabaseName;
    extern std::wstring wsDatabaseFileName;
    extern int nParagraph;
    extern int iSize;
    
    struct _CrtMemState Heap;
    unsigned long ulCounts;
    unsigned long ulSizes;
    unsigned long ulCount;
    unsigned long ulSize;
    unsigned long ulTotal;
    
    namespace SpecificationLoader
    {
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Threading;
    	using namespace System::DirectoryServices;
    	namespace Word = Microsoft::Office::Interop::Word;
    	
    	bool bIsDbConnected;
    	erc ulDocSize;
    	bool bNewDoc = false;
    	erc ulTotalNbWords;
    	
    
    	MainMenue::MainMenue(void)
    	{
    		int i;
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		Console::WriteLine("Constructeur MainMenue");
    		MainMenue::InitializeComponent();
    		//
    		//TODO: ajoutez ici le code du constructeur
    		//
    		MainMenue::InitializeProgressBar();
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		progressBar1->Visible = false;
    		bIsDbConnected = false;
    	}
    
    	MainMenue::~MainMenue()
    	{
    		if (components)
    		{
    			delete components;
    		}
    	}
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void MainMenue::InitializeComponent(void)
    		{
    			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
    			this->filesToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->openAFileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->helpToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->progressBar1 = (gcnew System::Windows::Forms::ProgressBar());
    			this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker());
    			this->ResultLabel = (gcnew System::Windows::Forms::Label());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->label3 = (gcnew System::Windows::Forms::Label());
    			this->label4 = (gcnew System::Windows::Forms::Label());
    			this->label6 = (gcnew System::Windows::Forms::Label());
    			this->label7 = (gcnew System::Windows::Forms::Label());
    			this->menuStrip1->SuspendLayout();
    			this->SuspendLayout();
    			// 
    			// menuStrip1
    			// 
    			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->filesToolStripMenuItem, 
    				this->helpToolStripMenuItem});
    			this->menuStrip1->Location = System::Drawing::Point(0, 0);
    			this->menuStrip1->Name = L"menuStrip1";
    			this->menuStrip1->Size = System::Drawing::Size(1018, 24);
    			this->menuStrip1->TabIndex = 0;
    			this->menuStrip1->Text = L"menuStrip1";
    			// 
    			// filesToolStripMenuItem
    			// 
    			this->filesToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->openAFileToolStripMenuItem, 
    				this->exitToolStripMenuItem});
    			this->filesToolStripMenuItem->Name = L"filesToolStripMenuItem";
    			this->filesToolStripMenuItem->Size = System::Drawing::Size(40, 20);
    			this->filesToolStripMenuItem->Text = L"Files";
    			// 
    			// openAFileToolStripMenuItem
    			// 
    			this->openAFileToolStripMenuItem->Name = L"openAFileToolStripMenuItem";
    			this->openAFileToolStripMenuItem->Size = System::Drawing::Size(137, 22);
    			this->openAFileToolStripMenuItem->Text = L"Open a file";
    			this->openAFileToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::openAFileToolStripMenuItem_Click);
    			// 
    			// exitToolStripMenuItem
    			// 
    			this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
    			this->exitToolStripMenuItem->Size = System::Drawing::Size(137, 22);
    			this->exitToolStripMenuItem->Text = L"Exit";
    			this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::exitToolStripMenuItem_Click);
    			// 
    			// helpToolStripMenuItem
    			// 
    			this->helpToolStripMenuItem->Name = L"helpToolStripMenuItem";
    			this->helpToolStripMenuItem->Size = System::Drawing::Size(40, 20);
    			this->helpToolStripMenuItem->Text = L"Help";
    			this->helpToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::helpToolStripMenuItem_Click);
    			// 
    			// progressBar1
    			// 
    			this->progressBar1->Location = System::Drawing::Point(36, 116);
    			this->progressBar1->Name = L"progressBar1";
    			this->progressBar1->Size = System::Drawing::Size(927, 19);
    			this->progressBar1->TabIndex = 1;
    			// 
    			// ResultLabel
    			// 
    			this->ResultLabel->AutoSize = true;
    			this->ResultLabel->Location = System::Drawing::Point(66, 418);
    			this->ResultLabel->Name = L"ResultLabel";
    			this->ResultLabel->Size = System::Drawing::Size(0, 13);
    			this->ResultLabel->TabIndex = 2;
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(761, 418);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(0, 13);
    			this->label1->TabIndex = 3;
    			// 
    			// label2
    			// 
    			this->label2->AutoSize = true;
    			this->label2->Location = System::Drawing::Point(509, 233);
    			this->label2->Name = L"label2";
    			this->label2->Size = System::Drawing::Size(0, 13);
    			this->label2->TabIndex = 4;
    			// 
    			// label3
    			// 
    			this->label3->AutoSize = true;
    			this->label3->Location = System::Drawing::Point(432, 418);
    			this->label3->Name = L"label3";
    			this->label3->Size = System::Drawing::Size(0, 13);
    			this->label3->TabIndex = 5;
    			// 
    			// label4
    			// 
    			this->label4->AutoSize = true;
    			this->label4->Location = System::Drawing::Point(41, 88);
    			this->label4->Name = L"label4";
    			this->label4->Size = System::Drawing::Size(0, 13);
    			this->label4->TabIndex = 6;
    			// 
    			// label6
    			// 
    			this->label6->AutoSize = true;
    			this->label6->Location = System::Drawing::Point(36, 154);
    			this->label6->Name = L"label6";
    			this->label6->Size = System::Drawing::Size(0, 13);
    			this->label6->TabIndex = 8;
    			// 
    			// label7
    			// 
    			this->label7->AutoSize = true;
    			this->label7->Location = System::Drawing::Point(216, 154);
    			this->label7->Name = L"label7";
    			this->label7->Size = System::Drawing::Size(0, 13);
    			this->label7->TabIndex = 9;
    			// 
    			// MainMenue
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(1018, 479);
    			this->Controls->Add(this->label7);
    			this->Controls->Add(this->label6);
    			this->Controls->Add(this->label4);
    			this->Controls->Add(this->label3);
    			this->Controls->Add(this->label2);
    			this->Controls->Add(this->label1);
    			this->Controls->Add(this->ResultLabel);
    			this->Controls->Add(this->progressBar1);
    			this->Controls->Add(this->menuStrip1);
    			this->MainMenuStrip = this->menuStrip1;
    			this->Name = L"MainMenue";
    			this->Text = L"MainMenue";
    			this->menuStrip1->ResumeLayout(false);
    			this->menuStrip1->PerformLayout();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    
    	System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    		int i;
    		OpenAFile^ newWindow = gcnew OpenAFile( this);
    		newWindow->ShowDialog();
    		progressBar1->Visible = true;
    		// c'est ici qu'on démarre l'aligner.
    		// erc CAligner::AlignDocumentsPairs(bool bMMIMode, std::wstring sSourceFileName, std::wstring sDocType, std::wstring *sDatabaseType, std::wstring *sDatabaseFileName);
    		bIsDbConnected = SpecificationLoader::objAligner.InitiateDbTransaction( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen, bIsDbConnected, bNewDoc, wsTypeDocument, &wsDatabaseName, &wsDatabaseFileName);
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		objWordManager = gcnew SpecificationLoader::CWManager;
    		objWordManager->StartWordApi();
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		ulDocSize = objWordManager->OpenWordDocument( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen);
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		backgroundWorker1->RunWorkerAsync();
    	}
    	
    	System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    		objAligner.CloseDBTransaction();
    		this->Close();
    	}
    
    	System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    	}
    
    	void MainMenue::InitializeProgressBar()
    	{
    		Shown += gcnew EventHandler(  this, &MainMenue::Form1_Shown);
    		// To report progress from the background worker we need to set this property
    		backgroundWorker1->WorkerReportsProgress = true;
    		// This event will be raised when we call ReportProgress
    		backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler( this, &MainMenue::backgroundWorker1_ProgressChanged);
    		backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this, &MainMenue::backgroundWorker1_DoWork );
    	}
    
    	void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e)
    	{
    		// Start the background worker
    		progressBar1->Visible = false;
    	}
    	
    	// Back on the 'UI' thread so we can update the progress bar
    	void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
    	{
    		System::String^ msg;
    		// The progress percentage is a property of e
    		progressBar1->Value = e->ProgressPercentage;
    		msg = L"Progress is " + e->ProgressPercentage + L"%";
    		ResultLabel->Text = msg;
    		msg = L"Paragraph progress is: " + nParagraph;
    		label1->Text = msg;
    		msg = L"Number of Word processed is: " + ulTotalNbWords;
    		label3->Text = msg;
    		msg = L"Specification loading Process";
    		
    	}
    	// Back on the 'UI' thread so we can update the progress bar
    	void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
    	{
    		System::String^ msg;
    		label4->Text = msg;
    		if( e->ProgressPercentage == 100)
    			label6->Text = L"Start of the Coherence assertion step";
    		if (iSize > 0)
    		{
    			msg = L"Number of Semantic Element Loaded: " + iSize + L" Elements";
    			label7->Text = msg;
    		}
    	}
    
    	System::Void MainMenue::backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e)
    	{
    		// The progress percentage is a property of e
    		// This event handler is where the actual, 
    		// potentially time-consuming work is done. 
    		// Get the BackgroundWorker that raised this event.
    		int i;
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);
    		// C'est ici qu'on démarre l'anlyse en tâche de fond.
    		objWordManager->StartDocAnalysis( backgroundWorker1, ulDocSize, bNewDoc);
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		objSoftwareManager.Termination();
    		objWordManager->StartCoherenceAssertion( backgroundWorker1, ulDocSize);
    	}
    }


    Jean Noël Martin


    • Modifié JeanNoel53 jeudi 31 octobre 2013 09:58
    • Marqué comme réponse JeanNoel53 jeudi 31 octobre 2013 09:58
    jeudi 31 octobre 2013 08:50

Toutes les réponses

  • Bonjour,

    Je suis toujours à rechercher une solution pour les désallocations de mémoire.
    J'ai essayé de créer deux thread qui se succéderaient.
    V
    ous essayez de désallouer des objets dans vos 2 threads ? Je ne comprends pas ce que vous recherchez à faire exactement... Pouvez-vous nous expliquer votre problématique ?

    Est-il possible de voir le code complet .cpp et .h de la classe qui contient vos backgroundWorker ? Car il est difficile de voir d'où vient le problème...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 30 octobre 2013 21:46
    Modérateur
  • J'essaye toutes les pistes sur la base des comportements que j'ai observé:

    - Je sais que je désalloue les ressources en fin de 1° phase;

    - Je sais que je peux enchainer six itérations du programme sans l’arrêter.

    De ces deux observations je conclue que les désallocations se passent bien.

    - J'ai observé que le tas est toujours alloué après les désallocations;

    - Mais lorsqu'on met l'observatoire du tas dans le main il n'y a rien d'alloué.

    J'ai donc supprimé le deuxième backgroundWorker

    Pour cela j'ai organisé la remonté de l’observatoire du tas dans le MainMenue:

    Pour suivre votre demande je met cette classe à votre disposition ainsi que sa déclaration.la déclaration

    #pragma once
    
    namespace SpecificationLoader
    {
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	
    	namespace Word = Microsoft::Office::Interop::Word;
    	
    	/// Description résumée de MainMenue
    	public ref class MainMenue : public System::Windows::Forms::Form
    	{
    	public:
    		MainMenue::MainMenue(void);
    		System::ComponentModel::BackgroundWorker^  backgroundWorker1;
    		static SpecificationLoader::CWManager^ objWordManager;
    	private: 
    		System::Windows::Forms::Label^  label1;
    		System::Windows::Forms::Label^  label2;
    		System::Windows::Forms::Label^  label3;
    		System::Windows::Forms::Label^  label4;
    		System::Windows::Forms::Label^  label6;
    		System::Windows::Forms::Label^  label7;
    	
    	protected:
    		/// Nettoyage des ressources utilisées.
    		MainMenue::~MainMenue();
    
    	private:
    		int numberToCompute;
    		int highestPercentageReached;
    		System::Windows::Forms::MenuStrip^  menuStrip1;
    		System::Windows::Forms::ToolStripMenuItem^  filesToolStripMenuItem;
    		System::Windows::Forms::ToolStripMenuItem^  openAFileToolStripMenuItem;
    		System::Windows::Forms::ToolStripMenuItem^  exitToolStripMenuItem;
    		System::Windows::Forms::ToolStripMenuItem^  helpToolStripMenuItem;
    		System::Windows::Forms::Label^  ResultLabel;
    		System::Windows::Forms::ProgressBar^  progressBar1;
    		System::ComponentModel::Container ^components;
    		void MainMenue::InitializeComponent(void);
    		System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e);
    		System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e);
    		System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e);
    		void MainMenue::InitializeProgressBar();
    		void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e);
    		void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e);
    		System::Void MainMenue::backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e);
    		void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e);
    		System::Void MainMenue::backgroundWorker2_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e);
    	private: System::Void oadingSpecification(System::Object^  sender, System::EventArgs^  e) {
    			 }
    	};
    }

    et le bloc de code avec les observatoires

    #pragma managed 
    #include "StdAfx.h"
    #include "Macro.h"
    #include "AlignStructure.h"
    #include "Enumerations.hpp"
    #include "Structure.h"
    #include "TypeDefs.hpp"
    #include "POS.h"
    #include "Layout.h"
    #include "ClassesAligner.hpp"
    #include "LinkDescription.h"
    #include "Manager.h"
    #include "Aligner.h"
    #include "WordManager.h"
    #include "OpenAFile.h"
    #include "MainMenue.h"
    
    extern std::wstring wsFileToOpen;
    extern std::wstring wsPathOfTheFile;
    extern std::wstring wsDiskOfTheFile;
    extern std::wstring wsLanguage;
    extern std::wstring wsTypeDocument;
    extern std::wstring wsDatabaseName;
    extern std::wstring wsDatabaseFileName;
    extern int nParagraph;
    extern int iSize;
    
    struct _CrtMemState Heap;
    unsigned long ulCounts;
    unsigned long ulSizes;
    unsigned long ulCount;
    unsigned long ulSize;
    unsigned long ulTotal;
    
    namespace SpecificationLoader
    {
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Threading;
    	using namespace System::DirectoryServices;
    	namespace Word = Microsoft::Office::Interop::Word;
    	
    	bool bIsDbConnected;
    	erc ulDocSize;
    	bool bNewDoc = false;
    	erc ulTotalNbWords;
    	
    
    	MainMenue::MainMenue(void)
    	{
    		int i;
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		Console::WriteLine("Constructeur MainMenue");
    		MainMenue::InitializeComponent();
    		//
    		//TODO: ajoutez ici le code du constructeur
    		//
    		MainMenue::InitializeProgressBar();
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		progressBar1->Visible = false;
    		bIsDbConnected = false;
    	}
    
    	MainMenue::~MainMenue()
    	{
    		if (components)
    		{
    			delete components;
    		}
    	}
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void MainMenue::InitializeComponent(void)
    		{
    			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
    			this->filesToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->openAFileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->helpToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->progressBar1 = (gcnew System::Windows::Forms::ProgressBar());
    			this->backgroundWorker1 = (gcnew System::ComponentModel::BackgroundWorker());
    			this->ResultLabel = (gcnew System::Windows::Forms::Label());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->label3 = (gcnew System::Windows::Forms::Label());
    			this->label4 = (gcnew System::Windows::Forms::Label());
    			this->label6 = (gcnew System::Windows::Forms::Label());
    			this->label7 = (gcnew System::Windows::Forms::Label());
    			this->menuStrip1->SuspendLayout();
    			this->SuspendLayout();
    			// 
    			// menuStrip1
    			// 
    			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->filesToolStripMenuItem, 
    				this->helpToolStripMenuItem});
    			this->menuStrip1->Location = System::Drawing::Point(0, 0);
    			this->menuStrip1->Name = L"menuStrip1";
    			this->menuStrip1->Size = System::Drawing::Size(1018, 24);
    			this->menuStrip1->TabIndex = 0;
    			this->menuStrip1->Text = L"menuStrip1";
    			// 
    			// filesToolStripMenuItem
    			// 
    			this->filesToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->openAFileToolStripMenuItem, 
    				this->exitToolStripMenuItem});
    			this->filesToolStripMenuItem->Name = L"filesToolStripMenuItem";
    			this->filesToolStripMenuItem->Size = System::Drawing::Size(40, 20);
    			this->filesToolStripMenuItem->Text = L"Files";
    			// 
    			// openAFileToolStripMenuItem
    			// 
    			this->openAFileToolStripMenuItem->Name = L"openAFileToolStripMenuItem";
    			this->openAFileToolStripMenuItem->Size = System::Drawing::Size(137, 22);
    			this->openAFileToolStripMenuItem->Text = L"Open a file";
    			this->openAFileToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::openAFileToolStripMenuItem_Click);
    			// 
    			// exitToolStripMenuItem
    			// 
    			this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
    			this->exitToolStripMenuItem->Size = System::Drawing::Size(137, 22);
    			this->exitToolStripMenuItem->Text = L"Exit";
    			this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::exitToolStripMenuItem_Click);
    			// 
    			// helpToolStripMenuItem
    			// 
    			this->helpToolStripMenuItem->Name = L"helpToolStripMenuItem";
    			this->helpToolStripMenuItem->Size = System::Drawing::Size(40, 20);
    			this->helpToolStripMenuItem->Text = L"Help";
    			this->helpToolStripMenuItem->Click += gcnew System::EventHandler(this, &MainMenue::helpToolStripMenuItem_Click);
    			// 
    			// progressBar1
    			// 
    			this->progressBar1->Location = System::Drawing::Point(36, 116);
    			this->progressBar1->Name = L"progressBar1";
    			this->progressBar1->Size = System::Drawing::Size(927, 19);
    			this->progressBar1->TabIndex = 1;
    			// 
    			// ResultLabel
    			// 
    			this->ResultLabel->AutoSize = true;
    			this->ResultLabel->Location = System::Drawing::Point(66, 418);
    			this->ResultLabel->Name = L"ResultLabel";
    			this->ResultLabel->Size = System::Drawing::Size(0, 13);
    			this->ResultLabel->TabIndex = 2;
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(761, 418);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(0, 13);
    			this->label1->TabIndex = 3;
    			// 
    			// label2
    			// 
    			this->label2->AutoSize = true;
    			this->label2->Location = System::Drawing::Point(509, 233);
    			this->label2->Name = L"label2";
    			this->label2->Size = System::Drawing::Size(0, 13);
    			this->label2->TabIndex = 4;
    			// 
    			// label3
    			// 
    			this->label3->AutoSize = true;
    			this->label3->Location = System::Drawing::Point(432, 418);
    			this->label3->Name = L"label3";
    			this->label3->Size = System::Drawing::Size(0, 13);
    			this->label3->TabIndex = 5;
    			// 
    			// label4
    			// 
    			this->label4->AutoSize = true;
    			this->label4->Location = System::Drawing::Point(41, 88);
    			this->label4->Name = L"label4";
    			this->label4->Size = System::Drawing::Size(0, 13);
    			this->label4->TabIndex = 6;
    			// 
    			// label6
    			// 
    			this->label6->AutoSize = true;
    			this->label6->Location = System::Drawing::Point(36, 154);
    			this->label6->Name = L"label6";
    			this->label6->Size = System::Drawing::Size(0, 13);
    			this->label6->TabIndex = 8;
    			// 
    			// label7
    			// 
    			this->label7->AutoSize = true;
    			this->label7->Location = System::Drawing::Point(216, 154);
    			this->label7->Name = L"label7";
    			this->label7->Size = System::Drawing::Size(0, 13);
    			this->label7->TabIndex = 9;
    			// 
    			// MainMenue
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(1018, 479);
    			this->Controls->Add(this->label7);
    			this->Controls->Add(this->label6);
    			this->Controls->Add(this->label4);
    			this->Controls->Add(this->label3);
    			this->Controls->Add(this->label2);
    			this->Controls->Add(this->label1);
    			this->Controls->Add(this->ResultLabel);
    			this->Controls->Add(this->progressBar1);
    			this->Controls->Add(this->menuStrip1);
    			this->MainMenuStrip = this->menuStrip1;
    			this->Name = L"MainMenue";
    			this->Text = L"MainMenue";
    			this->menuStrip1->ResumeLayout(false);
    			this->menuStrip1->PerformLayout();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    
    	System::Void MainMenue::openAFileToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    		int i;
    		OpenAFile^ newWindow = gcnew OpenAFile( this);
    		newWindow->ShowDialog();
    		progressBar1->Visible = true;
    		// c'est ici qu'on démarre l'aligner.
    		// erc CAligner::AlignDocumentsPairs(bool bMMIMode, std::wstring sSourceFileName, std::wstring sDocType, std::wstring *sDatabaseType, std::wstring *sDatabaseFileName);
    		bIsDbConnected = SpecificationLoader::objAligner.InitiateDbTransaction( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen, bIsDbConnected, bNewDoc, wsTypeDocument, &wsDatabaseName, &wsDatabaseFileName);
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		objWordManager = gcnew SpecificationLoader::CWManager;
    		objWordManager->StartWordApi();
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		ulDocSize = objWordManager->OpenWordDocument( wsDiskOfTheFile + wsPathOfTheFile + wsFileToOpen);
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		backgroundWorker1->RunWorkerAsync();
    	}
    	
    	System::Void MainMenue::exitToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    		objAligner.CloseDBTransaction();
    		this->Close();
    	}
    
    	System::Void MainMenue::helpToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e)
    	{
    	}
    
    	void MainMenue::InitializeProgressBar()
    	{
    		Shown += gcnew EventHandler(  this, &MainMenue::Form1_Shown);
    		// To report progress from the background worker we need to set this property
    		backgroundWorker1->WorkerReportsProgress = true;
    		// This event will be raised when we call ReportProgress
    		backgroundWorker1->ProgressChanged += gcnew ProgressChangedEventHandler( this, &MainMenue::backgroundWorker1_ProgressChanged);
    		backgroundWorker1->DoWork += gcnew DoWorkEventHandler( this, &MainMenue::backgroundWorker1_DoWork );
    	}
    
    	void MainMenue::Form1_Shown( System::Object^ sender, System::EventArgs^ e)
    	{
    		// Start the background worker
    		progressBar1->Visible = false;
    	}
    	
    	// Back on the 'UI' thread so we can update the progress bar
    	void MainMenue::backgroundWorker1_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
    	{
    		System::String^ msg;
    		// The progress percentage is a property of e
    		progressBar1->Value = e->ProgressPercentage;
    		msg = L"Progress is " + e->ProgressPercentage + L"%";
    		ResultLabel->Text = msg;
    		msg = L"Paragraph progress is: " + nParagraph;
    		label1->Text = msg;
    		msg = L"Number of Word processed is: " + ulTotalNbWords;
    		label3->Text = msg;
    		msg = L"Specification loading Process";
    		
    	}
    	// Back on the 'UI' thread so we can update the progress bar
    	void MainMenue::backgroundWorker2_ProgressChanged( System::Object^ sender, ProgressChangedEventArgs^ e)
    	{
    		System::String^ msg;
    		label4->Text = msg;
    		if( e->ProgressPercentage == 100)
    			label6->Text = L"Start of the Coherence assertion step";
    		if (iSize > 0)
    		{
    			msg = L"Number of Semantic Element Loaded: " + iSize + L" Elements";
    			label7->Text = msg;
    		}
    	}
    
    	System::Void MainMenue::backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e)
    	{
    		// The progress percentage is a property of e
    		// This event handler is where the actual, 
    		// potentially time-consuming work is done. 
    		// Get the BackgroundWorker that raised this event.
    		int i;
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);
    		// C'est ici qu'on démarre l'anlyse en tâche de fond.
    		objWordManager->StartDocAnalysis( backgroundWorker1, ulDocSize, bNewDoc);
    		for( i = 0; i < _MAX_BLOCKS; i++)
    		{
    			ulCounts += Heap.lCounts[i];
    			ulSizes += Heap.lSizes[i];
    		}
    		ulTotal = ulCounts * ulSizes;
    		objSoftwareManager.Termination();
    		objWordManager->StartCoherenceAssertion( backgroundWorker1, ulDocSize);
    	}
    }


    Jean Noël Martin


    • Modifié JeanNoel53 jeudi 31 octobre 2013 09:58
    • Marqué comme réponse JeanNoel53 jeudi 31 octobre 2013 09:58
    jeudi 31 octobre 2013 08:50