[Visual C++] Przekazywanie argumentów do wątku

0

Tworzę aplikację okienkową w Visual C++, chce aby po kliknięciu na odpowiedni przycisk utworzony był wątek, który wykonuje określone operacje, w skrócie wygląda to mniej więcej tak:

#pragma once

namespace Klient {


	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:

	Form1(void)
                     
	Thread^ watek;
	protected: 

private: static void ThreadProc()
		 {
			 
			 //kod watku
		 }

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {


			watek = gcnew Thread( gcnew ThreadStart( &ThreadProc ) );			
			watek->Start();
			return;
		 }

}; 
}

Problem polega na tym, że w tym rozwiązaniu w wątku nie mogę odwoływać się do komponentów znajdujących się na formatce, gdyż procedura wątku jest statyczna. Musi ona taka pozostać aby kod się kompilował. Nie wiem co z tym fantem zrobić. Czytałem na MSDN o innych sposobach programowania wielowątkowości w VC++ (MFC, CRT).

Z użyciem CRT wiązał się taki problem, że pomimo tego, że sposób ten wspiera przekazywanie argumentów do funkcji wątku (poprzez wskaźniki na void), jednak kompilator zwracał błąd podczas próby konwersji wskaźnika na formatkę (this) na typ *void, robiłem to mniej więcej tak:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {


			watek = _beginthread( ThreadProc, 0, (void*)this);	
			watek->Start();
			return;
		 }

Oczywiście zmienna watek w tym przykładzie miała inny, odpowiedni typ. Napisałem powyżej linijkę tworzenia wątku trochę z pamięci i mogą tam być błędy, chciałem tylko przekazać idee jak to robiłem. Gdy kompilowałem kod jedynym błędem była niemożliwość konwersji trzeciego parametru procedury.

Jeżeli chodzi o MFC to nie wiem do końca jak można dołączyć tę bibliotekę do już istniejącego projektu, jestem już trochę sfrustrowany całym tym środowiskiem i obawiam się, że po dołączeniu tej oto biblioteki mój problem się nie rozwiąże z powodu kolejnych zabezpieczeń tego oto 'genialnego' kompilatora. Zdecydowałem się przedstawić sprawę tutaj, może ktoś zna bardziej przystępny sposób zrobienia tego. Proszę o rady.

0

Jeszcze jedno: z tego co pamiętam to w C++ Builder takie rzeczy robiło się bez większego stresu, procedura wątku mogła być niestatyczną metodą pewnej klasy co rozwiązywało problem. Może najlepszym rozwiązaniem jest przerzucenie się na to środowisko? Oby nie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1