Для обычного приложения вы никогда не захотите этого делать.Заставить iPhone имитировать выполнение задач с интенсивным использованием процессора?
Но ... Я создаю учебное приложение, чтобы показать людям, что происходит с различными моделями на разных устройствах iPhone и OS. OS 4 радикально изменила различные модели (IME: многие существующие коды НЕ РАБОТАЮТ при работе на OS 4).
Я пишу интерактивное тестовое приложение, которое позволяет запускать потоки для разных моделей (основной поток селектора, селекторный фон, nsoperationqueue и т. Д.) И посмотреть, что происходит с главным приложением GUI + во время его возникновения.
Но один из распространенных вариантов использования, который я хочу воспроизвести, это: «Thread, который выполняет загрузку backgorund, а затем анализирует результаты анализа с использованием процессора». Мы видим это в реальных приложениях.
Это не совсем тривиально; манера «быть занятой» имеет значение.
Итак ... как я могу имитировать это? Я ищу что-то, что гарантированно не отбрасывается оптимизирующим компилятором (или сейчас, или с лучшим компилятором), и этого достаточно, чтобы заставить поток работать с максимальным ЦП в течение примерно 5 секунд.
NB: в моих реальных приложениях я заметил, что есть некоторые странные вещи, которые происходят, когда поток iPhone занят - например. фоновые потоки будут голодать главным потоком EVEN WHEN, установленным с более низким приоритетом. Хотя это явно ошибка в планировщике потоков Apple, я бы хотел сделать занятый, который демонстрирует это - и/или альтернативный занятый, который показывает, что происходит, когда вы НЕ запускаете это поведение в планировщике.
UPDATE:
Например, следующее может иметь различные эффекты:
for(int i=0; i<1000; i++)
for(int k=0; k<1000; k++)
CC_MD5(cStr, strlen(cStr), result);
for(int i=0; i<1000000; i++)
CC_MD5(cStr, strlen(cStr), result);
... иногда, по крайней мере, компилятор, кажется, оптимизации последнего (и я не имею ни малейшего представления о компилятор вуду для этого - некоторые сборки не показали никакой разницы, некоторые это делали :()
UPDATE 2:
25 нитей, на первое поколение iPhone, делая millio n MD5 каждый ... и почти нет ощутимого влияния на графический интерфейс пользователя.
Принимая во внимание, что 5 потоков, анализирующих XML, с использованием синтаксического анализа на основе SAX, как правило, прерывают работу графического интерфейса.
Кажется, что MD5 хэши не вызывает проблем в iPhone глючный токарно-планировщиком :(. Я собираюсь исследовать MEM распределения вместо этого, увидеть, если это имеет различный эффект.
Вы только что сказали это сами, вы хотите смоделировать «Thread, который выполняет загрузку backgorund, а затем анализирует результаты с использованием процессора». Почему бы вам не сделать это? скачайте кучу случайных файлов и примените на нем процедуру обработки (например, md5), но используйте как 100 потоков. – 5ound
@ 5ound Это должен быть ответ .. вы бы получили мой +1, если бы это было так. Никто не должен требовать, чтобы код был создан для себя без какой-либо работы. Вашей идеи достаточно для ответа. – Jann
Jann - он не работает (я не думаю, что это так просто). Теория этого тривиальна, но практика - это то, что меня толкает :) – Adam