Показать сообщение отдельно
Старый 24.04.2014, 16:18   #1926
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Вопросы от новичка

написал свой parallel for.
	public static void ParallelFor(Action<int, int> loop, int count) {
		count /= SystemInfo.processorCount;

		ManualResetEvent[] events = new ManualResetEvent[SystemInfo.processorCount];
		for(int i=0; i<SystemInfo.processorCount; i++) {
			events[i] = InvokeLoop( loop, count*i, count*i+count );
		}
		WaitHandle.WaitAll( events );
	}

	private static ManualResetEvent InvokeLoop(Action<int, int> loop, int from, int to) {
		ManualResetEvent evt = new ManualResetEvent(false);
		ThreadPool.QueueUserWorkItem( arg => {
			loop (from, to);
			evt.Set();
		} );
		return evt;
	}
Конечно в юнити или в моно с этим туго.
В .net есть ManualResetEventSlim, который должен быть быстрее. Да и CountdownEvent тут бы лучше подошел.
Но что есть - то есть.
Кстати, чертов MonoDevelop перестал видеть классы из System.Threading и System. Все красным выделяет и подсказки не работают(
Visual Studio 2013 юнити еще не начал поддерживать? А то старый 2012 не хочется ставить.
(Offline)
 
Ответить с цитированием