2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Qt menu
Сообщение16.11.2009, 23:08 
А можете немного про мьтоксы и семафоры рассказать ?

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 23:19 
mycoding
В двух словах не могу, но элементарный ликбез может осуществить Wikipedia, более продвинутый - Intuit.

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 23:39 
А можете подсказать , вот пытаюсь запустить потоки на qt используя winapi вот отрывот кода

Код:
void MainWindow::createthreads()
{
  stop=0;
  for(int i=0;i<5;i++)
  phils[i].eat=100;

  for(int i=0;i<5;i++)
  {
   hThread[i] = CreateThread(NULL, 0,RUN_THREADS, (void*)i, 0,&IDThread[i]);
   if (hThread[i] == NULL)
   {std::cout << "Error";std::cout << GetLastError();}
  }

}

И вот какую ошибку он выдаёт
Код:
C:/Qt-progi/Programming/laba_5/20/mainwindow.cpp:215: error: argument of type `DWORD (MainWindow::)(void*)' does not match `DWORD (*)(void*)'

 
 
 
 Re: Qt menu
Сообщение17.11.2009, 12:39 
Вот более подробный код

Код:
void MainWindow::createthreads()
{
  stop=0;
  for(int i=0;i<5;i++)
  phils[i].eat=100;

  for(int i=0;i<5;i++)
  {
   hThread[i] = CreateThread(NULL, 0,RUN_THREADS, i, 0,
                             &IDThread[i]);
   if (hThread[i] == NULL)
   {std::cout << "Error";std::cout << GetLastError();}
  }

}

DWORD WINAPI MainWindow::RUN_THREADS(int i)
{
    int n=(int)i;
    while(1)
    {
       think(n);
       take_forks_get_back_forks(n);
    }

  return 0;
}

 
 
 
 Re: Qt menu
Сообщение17.11.2009, 15:57 
mycoding
Функция RUN_THREADS:
1. должна иметь только один параметр типа LPVOID (он же void*);
2. может быть либо статическим членом класса, либо не являться членом класса вообще (это связано с тем, что у всякой нестатической функции-члена класса есть дополнительный, скрытый от программиста параметр, - указатель this на объект, для которого эта функция вызывается; а потому все нестатические функции-члены класса не попадают под правило 1).

 
 
 
 Re: Qt menu
Сообщение17.11.2009, 17:54 
Оно и так и так не работает у меня сначала в проге было LPVOID но всё равно не работало,
Ошибка в параметре &IDThread[i]

 
 
 
 Re: Qt menu
Сообщение17.11.2009, 18:14 
mycoding
Но Вы RUN_THREADS точно сделали статической?
mycoding в сообщении #262985 писал(а):
Ошибка в параметре &IDThread
Не знаю, какая ошибка м.б. в этом параметре (по крайней мере, по коду это не сильно видно), но если Вы его в дальнейшем не используете, можете передать в него NULL (функция CreateThread это позволяет).

 
 
 
 Re: Qt menu
Сообщение17.11.2009, 18:38 
ВОт прога, если можете исправте пожалуйста
http://moc-081.narod.ru/qt_proga.rar

-- Вт ноя 17, 2009 19:49:51 --

либо вот по этой ссылке какая
http://dl.dropbox.com/u/2536325/qt_proga.rar

-- Вт ноя 17, 2009 20:27:16 --

Если занулить то все равно та же самая ошибка вылетает

 
 
 
 Re: Qt menu
Сообщение18.11.2009, 19:37 
mycoding
Прототип функции RUN_THREADS (при объявлении класса MainWindow) должен выглядеть вот так:
Код:
static DWORD WINAPI RUN_THREADS(LPVOID param);
Заголовок функции в коде раскрытия ее реализации - то же, только без ключевого слова static (которое, собственно, и указывает на статичность функции):
Код:
DWORD WINAPI MainWindow::RUN_THREADS(LPVOID param)

 
 
 [ Сообщений: 24 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group