crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Qt winapi потоки
mycoding
  опции профиля:
сообщение 17.11.2009, 18:01
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пытаюсь запустить потоки на 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, 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;


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


Прочитал одну статью здесь по такому же вопросу на этом форуме, но там не написано как это решать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.11.2009, 18:15
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mycoding @ 17.11.2009, 21:01) *
argument of type `DWORD (MainWindow:: )(void*)' does not match `DWORD (*)(void*)
ну собственно компиллер тебе явно говорит в чём ошибка:
Цитата
аргумент типа `DWORD (MainWindow::)(void*)' не соответствует `DWORD (*)(void*)


Цитата(mycoding @ 17.11.2009, 21:01) *
hThread[i] = CreateThread(NULL, 0,RUN_THREADS, i, 0,
&IDThread[i]);
что такое RUN_THREADS?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 17.11.2009, 18:48
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Если есть возможность гляньте прогу вот
сорс http://dl.dropbox.com/u/2536325/qt_proga.rar

В winapi всё в таком же виде работает...

Ой, ссылка не рабочая
вот рабочая http://moc-081.narod.ru/qt_proga.rar
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.11.2009, 18:48
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


mycoding, ты лучше на вопросы отвечай, а то людям будет не интересно тему читать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 17.11.2009, 18:54
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


А я потом и сорс выложу, он такой интересный )))


CODE
void MainWindow::createthreads()
{ DWORD ID1;
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;
}


RUN_TREADS это запуск потока номер i
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.11.2009, 19:05
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mycoding @ 17.11.2009, 21:54) *
RUN_TREADS это запуск потока номер i
если мне не изменяет память это указатель на функцию, где у тебя функция RUN_TREADS?
из твоего кода я вижу только то, что видит компилятор т.е. функцию MainWindow::RUN_THREADS(int i)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 17.11.2009, 19:11
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну я этот вариант нам препод дал а я его уже реализую , мне тоже не нравится как сделано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.11.2009, 20:08
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(mycoding @ 17.11.2009, 22:11) *
мне тоже не нравится как сделано.
опиши свой вариант
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 17.11.2009, 20:13
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Я так понимаю он пытается передать указатель на метод RUN_THREADS. Этот метод вроде бы надо делать статическим или глобальным.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 17.11.2009, 20:28
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


А каким боком это к Qt относится??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.11.2019, 12:01