Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Win API многопоточность, многопоточность 
:(
    Опции темы
overmet
Дата 24.10.2009, 15:20 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile многопоточное приложение вычисляющее значение заданной функции с заданной точностью. Точность вычислений определять как разницу между значением функции, полученным при заданном начальном числе слагаемых N и 2N. Начальное значение N=1000.
Результаты вычислений сравнить с однопоточным приложением. Интерфейс, созда-ние и синхронизацию потоков реализовать средствами Win API. 
 smile 
Код

const int _SOME_MAGIC_VALUE = 5;

DWORD CALLBACK trd1(LPVOID p)
{
  HANDLE hEvent = (HANDLE)p;
  SetEvent(hEvent);

  int i = 0;
  while(i < _SOME_MAGIC_VALUE){
    SleepEx(INFINITE, true);
    cout << i++ << endl;
  }
  return 0;
}

VOID CALLBACK APCProc(ULONG_PTR dwParam)
{
  cout << "APC Proc #" << dwParam;
  cout << " threadid :" << GetCurrentThreadId() << endl;
}

int main()
{  
  HANDLE hEvent = CreateEvent(0, false, false, NULL);

  DWORD trd_id = 0;
  HANDLE hThread = CreateThread(0, 0, trd1, hEvent, 0, &trd_id);
  cout << "Thread id is 0x" << hex << trd_id << endl;

  WaitForSingleObject(hEvent, INFINITE);

  for(int i = 0;i < _SOME_MAGIC_VALUE;i++){
    QueueUserAPC(APCProc, hThread, i);
  }

  WaitForSingleObject(hThread, 1000);
  CloseHandle(hThread);
  return 0;
}

Почему нужно синхронизировать потоки с помощью события?
Почему, если закомментировать тело APCProc, на экран выводится следующее?Thread id is 0x7b4
0
1
2
3
4
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
niXman
Дата 24.10.2009, 15:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
DrHex
Дата 24.10.2009, 23:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Читай внимательно код. Синхронизации нет. Это сигнал говорящий что поток стартовал....
--------------------
google.com и это все.
PM MAIL   Вверх
Lazin
Дата 25.10.2009, 11:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата
  • const int _SOME_MAGIC_VALUE = 5;
  • DWORD CALLBACK trd1(LPVOID p)
  • {
  •   HANDLE hEvent = (HANDLE)p;
  •   SetEvent(hEvent);
  •   int i = 0;
  •   while(i < _SOME_MAGIC_VALUE){
  •     SleepEx(INFINITE, true);
  •     cout << i++ << endl;
  •   }
  •   return 0;
  • }
  • VOID CALLBACK APCProc(ULONG_PTR dwParam)
  • {
  •   cout << "APC Proc #" << dwParam;
  •   cout << " threadid :" << GetCurrentThreadId() << endl;
  • }
  • int main()
  • {  
  •   HANDLE hEvent = CreateEvent(0, false, false, NULL);
  •   DWORD trd_id = 0;
  •   HANDLE hThread = CreateThread(0, 0, trd1, hEvent, 0, &trd_id);
  •   cout << "Thread id is 0x" << hex << trd_id << endl;
  •   WaitForSingleObject(hEvent, INFINITE);
  •   for(int i = 0;i < _SOME_MAGIC_VALUE;i++){
  •     QueueUserAPC(APCProc, hThread, i);
  •   }
  •   WaitForSingleObject(hThread, 1000);
  •   CloseHandle(hThread);
  •   return 0;
  • }

Цитата

Почему нужно синхронизировать потоки с помощью события?

что-бы ф-я QueueUserAPC, не была вызвана до того, как поток начнет работать
Цитата

Почему, если закомментировать тело APCProc, на экран выводится следующее?Thread id is 0x7b4
0
1
2
3
4

первая строка выводится основным потоком, остальное выводит на экран поток, который ты создаешь функцией CreateThread
Цитата

Читай внимательно код. Синхронизации нет. Это сигнал говорящий что поток стартовал....

там нечего синхронизировать(разве что вывод на консоль), так-что и синхронизации нет
PM MAIL Skype GTalk   Вверх
overmet
Дата 27.10.2009, 12:25 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо всем, вопрос решен я удругой прогой занялся smile 
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Lazin
Дата 27.10.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



а зачем, спрашивается нужно было так распинаться..? smile 
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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