Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание многопоточного приложения. 
:(
    Опции темы
Izosin
Дата 24.9.2009, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Есть небольшая программка которая будет крутиться на хорошем сервере под Windows Server 2003, основная часть программы собрана в одну функцию вызываемую в цикле:

Код

        for (int i = 0; i < n; i++)
            if (tabl_nastroek[i].usin)
                obrabotat_zip(&tabl_nastroek[i]);


Как можно сделать вызов этой функции в отдельном потоке? Можно ли управлять количеством запущенных потоков. Предположим что максимальную производительность мы получаем при выполнении программы в 4 потока, мы указываем максимальное число потоков 4, и пока выполняется 4 потока 5-й не запускается. Как только один из потоков завершился, запускается очередной поток.

Если кому не трудно, набросайте небольшой примерчик, с чего можно начать.
PM MAIL   Вверх
Alca
Дата 24.9.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

и пока выполняется 4 потока 5-й не запускается

Семафор 
http://msdn.microsoft.com/en-us/library/ms682438(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms686946(VS.85).aspx


--------------------
PM WWW ICQ Skype Jabber   Вверх
bsa
Дата 24.9.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Izosin, тебе решение нужно универсальное или на WinAPI?
PM   Вверх
GoldFinch
Дата 24.9.2009, 22:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Код

boost::asio::io_service io_service;
boost::thread(boost::bind(&boost::asio::io_service::run,boost::ref(io_service)));
boost::thread(boost::bind(&boost::asio::io_service::run,boost::ref(io_service)));
boost::thread(boost::bind(&boost::asio::io_service::run,boost::ref(io_service)));
boost::thread(boost::bind(&boost::asio::io_service::run,boost::ref(io_service)));

for (int i = 0; i < n; i++)
            if (tabl_nastroek[i].usin)
                io_service.post(boost::bind(&obrabotat_zip,&tabl_nastroek[i]));

что-то вроде этого

Это сообщение отредактировал(а) GoldFinch - 24.9.2009, 22:07
PM MAIL ICQ   Вверх
bsa
Дата 25.9.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



GoldFinch,  smile 
PM   Вверх
GoldFinch
Дата 25.9.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



более правильный код использования асио мужно посмотреть тут
http://www.boost.org/doc/libs/1_40_0/doc/h...ver3/server.cpp
Код

void server::run()
{
  // Create a pool of threads to run all of the io_services.
  std::vector<boost::shared_ptr<boost::thread> > threads;
  for (std::size_t i = 0; i < thread_pool_size_; ++i)
  {
    boost::shared_ptr<boost::thread> thread(new boost::thread(
          boost::bind(&boost::asio::io_service::run, &io_service_)));
    threads.push_back(thread);
  }

  // Wait for all threads in the pool to exit.
  for (std::size_t i = 0; i < threads.size(); ++i)
    threads[i]->join();
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1146 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.