Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11

Билдер и 4 ядра

17.03.2012, 23:02. Показов 5147. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня 4-х ядерный процессор, и я использую CodeGear C++ Builder 11.

Приложение, над которым я работаю, вычислительноёмкое, и я хотел бы использовать процессор по максимуму.

Но когда открываю Windows Task Manager, вижу, что потребляется лишь 25% процессорного времени. Есть подозрение, что задействуется только одно ядро, хотя может быть просто в билдере стоит ограничение.

Вопрос: как сделать так, чтоб использовалось 90% процессора?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2012, 23:02
Ответы с готовыми решениями:

нетбук с каким процом лучше n550(2 ядра )или C-50(2 ядра )?
всем привет решил в следюющем году сдать егэ по инфе => надо готовится и учить програмирование а без практики одной теории мало по этому...

Помогайте выбрать: видюха 640М и проц i7 2.4Гц (4 ядра) или 750M и i7 2Гц (2 ядра) ?
Приветствую. Вот занес уже руку в кошелек для покупки ноута Acer ASPIRE V5-572G но тот засомневался в сторону V3-571G. Оба с ips...

Что выбрать: Intel 2 ядра или AMD 4 ядра?
Нужен дельный совет от гуру! Могу взять АМД проц 4 ядра, либо интеловский 2 ядерный, цена примерно та же. Боюсь, что с интеловским...

26
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
23.03.2012, 20:26  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Zolden hEvent создается один раз в главном потоке, тут он четыре раза

Проверял ещё Sleep'ом?
Не, hEvent создаётся один раз, потому что цикл for без скобочек.

А что такое Sleep?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
23.03.2012, 20:43
Цитата Сообщение от Zolden Посмотреть сообщение
А что такое Sleep?
функция задержки (в мс),
вставить в цикл ожидания завершения потоков для того, чтобы не грузить главный поток.
C++
1
2
3
4
5
6
7
bool c = true;
while (c){
  for (i = 0; i < nthreads; i++) // nthreads - количество потоков
    c = c && t[i]->Suspended; // t - массив указателей на потоки
  c = !c;
  Sleep(5);
}
Добавлено через 12 минут
WaitForSingleObject лучше, т.к. приостанавливает выполнение главного потока и возобновляет сразу по наступлению события, но труднее реализовать.
В то время как цикл выше через каждые 5мс будет опрашивать потоки, т.е. тратить процессорное время и каждый раз переключать контекст потока.
0
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
23.03.2012, 20:55  [ТС]
kzru_hunter, этого цикла проверки уже нет, я его заменил на предложенную тобой функцию WaitForSingleObject.

Проблема в том, что уже в первые секунды работы программы возникает ситуация, при которой событие hEvent не наступает, и программа зависает в ожидании. И мне жутко интересно узнать, почему. Код обоих классов я привёл парой постов выше. Есть идеи?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
23.03.2012, 21:03
главный поток же бесконечно выполняется?
тогда попробуй ResetEvent дописать рядом с
C++
1
threads_counter = nthreads;
еще смущает
C++
1
if (units.size() > 0)
, т.к. если это условие не выполнится, то WaitForSingleObject никогда не завершится.
0
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
24.03.2012, 01:48  [ТС]
kzru_hunter, ResetEvent проблемы не решил, а это
C++
1
if (units.size() > 0)
так и должно быть: если объектов больше нет, то и считать больше не надо

Я нашёл, что работает не так, как должно, но не понимаю, почему это происходит, это противоречит моим представлениям о работе потоков.

В цикле дочернего потока есть такой код:
C++
1
2
3
    if (threads_counter == 0)
        SetEvent(hEvent);
    Suspend();
когда последний из дочерних потоков запускает SetEvent(hEvent), по какой-то причине не выполняется следующая команда Suspend(), и на момент начала нового цикла главного потока один из дочерних потоков имеет Suspended = false. Эту ситуацию я зафиксировал и не могу понять, как она возникает, что потоку мешает продолжать выполнение, если он ещё не засуспенжен: я пробовал и приоритет главного потока снижать и ставить Sleep(1), чтоб дать время, но всё равно, один из потоков остаётся незасуспенженным.

Добавлено через 3 часа 58 минут
В общем, если у кого-то будут ещё версии, почему имеет место описанное мной странное поведение потоков - делитесь подозрениями. А на данный момент я вернулся к циклу, опрашивающему потоки. Пусть он жрёт процессорное время, но с ним проблема возникает крайне редко, и я её решаю форсированным суспендом заглючившего потока по истечении n миллисекунд.

Кстати, сколько процентов времени жрёт поток, если у него приоритет = tpIdle, а у полезного потка - tpNormal. Мне кажется, это ничтожные потери.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
24.03.2012, 04:28
используй пул потоков и будет тебе СЧАСТЬЕ :-D Джеффри Рихтер. 11 глава
0
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
24.03.2012, 18:03  [ТС]
агерон, о, то что нужно - книжка с подробным описанием потоков с нуля до тонкостей, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2012, 18:03

Что будет лучше i7 2630qm (2 Гц 4 ядра) vs i5 3230m (2,6 Гц 2 ядра) ?
Что будет лучше i7 2630qm (2 Гц 4 ядра) vs i5 3230m (2,6 Гц 2 ядра) ? Не использую программы поддерживающие многопоточность.

Что выбрать? 2 ядра 3100 Мгц или 4 ядра 1100 Мгц
Господа помогите с выбором ноутбука. Выбираю из этих двух: 1....

Конструкторы С++ Билдер
Здравствуйте программисты! Скажите пожалуйста, это правда,что конструктор предназначен для того,чтоб инициализировать переменные сразу, в...

Задача по Си Билдер
Нужно создать програму для решения функции 1(1+(sqr(sin(x+y)))/(2-abs(x)))+x . Буду благодарен за помощь .Значения независеміх сменніх x=1...

Портативный С++ Билдер
Ребята, скажите, где можно скачать портативный С++ БИЛДЕР 6, очень при очень нужно. Пробовал программой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru