Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 00:27   #1
men232
Пользователь
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию Поток в visual c++ и вызов метода из него.

Добрый вечер,

Ситуация такова, пишу в программе скачивание файла из интернета, все это дела закрепил в поток. Теперь необходимо из него вызвать метод(процедуру) толком еще не понял как это называется.

Сам поток:
Код:
 static void DownloadContent (Object^ startPoint) {
	String^ URL = "http://garrysmod-client.googlecode.com/svn/trunk/gmc/content/bin/AdminServer.dll";

	try
	{
		int startPointInt = Convert::ToInt32(startPoint);
		webRequest = (HttpWebRequest^)WebRequest::Create( URL );
		webResponse = (HttpWebResponse^)webRequest->GetResponse();
		strResponse = webResponse->GetResponseStream();
		Int64 fileSize = webResponse->ContentLength;
		strResponse = webResponse->GetResponseStream();

                if (startPointInt == 0) {
			strLocal = gcnew FileStream("C:\\Users\\Andrew\\Desktop\\test.dll", FileMode::Create, FileAccess::Write, FileShare::None);
		}
		else
		{
			strLocal = gcnew FileStream("C:\\Users\\Andrew\\Desktop\\test.dll", FileMode::Append, FileAccess::Write, FileShare::None);
		}
		int bytesSize = 0;
		array< Byte >^ downBuffer = gcnew array< Byte >(2048);

                while ((bytesSize = strResponse->Read(downBuffer, 0, downBuffer->Length)) > 0)
		{
			Application::DoEvents();
			strLocal->Write(downBuffer, 0, bytesSize);
			// Здесь мне нужно вызвать процедуру UpdateProgress(strLocal->Length, fileSize + startPointInt);
		}
	}
	finally
	{
		strResponse->Close();
		strLocal->Close();
	}
 }
Простым вызовом UpdateProgress(); Не получается - ругается UpdateProgress: недопустимый вызов нестатической функции-члена.
Есть код под C# с использованием delegate, не знаю как его для visual c++ переписать.
Объявление:
Код:
 private delegate void UpdateProgessCallback(Int64 BytesRead, Int64 TotalBytes);
Вызов:
Код:
this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { strLocal.Length, fileSize + startPointInt });
Вот еще одна беда из static вообще нельзя обратится к форме и её компонентам. Буду рад любой помощи.
men232 вне форума Ответить с цитированием
Старый 21.01.2012, 00:30   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Вечер добрый. А из каких соображений метод DownloadContent вообще был объявлен статическим?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 21.01.2012, 00:43   #3
men232
Пользователь
 
Регистрация: 11.05.2011
Сообщений: 59
По умолчанию

Если его не объявить как статический ругается:

error C3350: System::Threading::ParameterizedThr eadStart: для конструктора делегата требуется 2 аргументов.

DownloadContent: в вызове функции отсутствует список аргументов; используйте "&MenSkiClient::Form1::DownloadCont ent" для создания указателя на член.

Строка:
Код:
thrDownload = gcnew Thread(gcnew ParameterizedThreadStart(DownloadContent));
men232 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов Java метода из c++ (JNI) Евгений643 Qt и кроссплатформенное программирование С/С++ 1 26.12.2011 00:58
Вызов метода в другом классе jec Общие вопросы C/C++ 8 31.12.2010 21:16
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
Вызов метода в asm вставке. Mixasik Общие вопросы Delphi 3 20.02.2010 10:42
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41