Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 21.02.2013, 03:32   #16
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Как искать идентичные файлы?

Можно всунуть обновление GUI в конец функции сравнивающей файлы.
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 14:42   #17
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Как искать идентичные файлы?

Наконец то разобрался я как создать поток, но тут у меня возникли еще трудности.
При нажатии кнопки "Start" выполняется данный код:
	public:
		Thread^ processing;
		FileBase^ fileBase;

...

	private: System::Void buttonStart_Click(System::Object^  sender, System::EventArgs^  e) {
				 buttonStart->Enabled = false;
				 resultView->Rows->Clear();
				 array<String^>^ tmp = gcnew array<String^>(directoryList->Items->Count);
				 directoryList->Items->CopyTo(tmp,0);
				 fileBase = gcnew FileBase(tmp, checkboxSearchSubdir->Checked);
				 ThreadStart^ fileBaseDelegate = gcnew ThreadStart(this, &mainForm::DoProcessing);
				 processing = gcnew	Thread(fileBaseDelegate);
				 processing->Start();
			 }
Ну а сам код выполняемой функции:
	public: void DoProcessing()
			{
				progressBar->Value = 0;
				progressBar->Maximum = fileBase->candidates->Count;
				for each(KeyValuePair<String^,Int64> iCandidate in fileBase->candidates)
				{
					if (fileBase->IsDuplicate(iCandidate))
					resultView->Rows->Add(iCandidate.Key , iCandidate.Value.ToString());
					progressBar->Value++;
				}
				buttonStart->Enabled = true;
			}
И сразу же после старта потока вылетает екзепшн:
Нажмите на изображение для увеличения
Название: exception.png
Просмотров: 806
Размер:	23.3 Кб
ID:	18832

Как лучше всего это обойти?
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 14:52   #18
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Как искать идентичные файлы?

Сообщение от dsd Посмотреть сообщение
Можно всунуть обновление GUI в конец функции сравнивающей файлы.
Не рекомендуется смешивать бизнес-логику и GUI... То есть это плохо когда в классы и методы отвечающие за выполнение логики впихивать код что создает или изменяет GUI. Так делать можно разве что для отладки...
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 16:09   #19
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Как искать идентичные файлы?

Вообще когда потоков небыло это решалось банальным sleep 1
Система получает квант времени на перерисовку гуя, но гуй по прежнему не доступен. Зато прогресс-бары обновятся.
__________________
(Offline)
 
Ответить с цитированием
Старый 21.02.2013, 17:27   #20
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Как искать идентичные файлы?

Сообщение от SBJoker Посмотреть сообщение
Вообще когда потоков небыло это решалось банальным sleep 1
Система получает квант времени на перерисовку гуя, но гуй по прежнему не доступен. Зато прогресс-бары обновятся.
Вот как раз с проблем прорисовкой прогресбара нет. А мне нужно больше! Мне нужен доступ к ГУЮ, а конкретно к его контролам (элементам) с отдельного потока!
Конечно я же могу справиться с екзепшонами наложив try-catch при каждом изменении контролов ГУЯ, но там есть цикл внутри... Так что с быстродействием доведется распрощаться , да и ревювер не скажет мне что я молодец за это...
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:08.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com