Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Другие библиотеки _ Qt winapi потоки

Автор: mycoding 17.11.2009, 18:01

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

Цитата(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

Если есть возможность гляньте прогу вот
сорс 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

mycoding, ты лучше на вопросы отвечай, а то людям будет не интересно тему читать

Автор: mycoding 17.11.2009, 18:54

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


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

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

Автор: mycoding 17.11.2009, 19:11

Ну я этот вариант нам препод дал а я его уже реализую , мне тоже не нравится как сделано.

Автор: Litkevich Yuriy 17.11.2009, 20:08

Цитата(mycoding @ 17.11.2009, 22:11) *
мне тоже не нравится как сделано.
опиши свой вариант

Автор: SABROG 17.11.2009, 20:13

Я так понимаю он пытается передать указатель на метод RUN_THREADS. Этот метод вроде бы надо делать статическим или глобальным.

Автор: Elfinit 17.11.2009, 20:28

А каким боком это к Qt относится??

Автор: Litkevich Yuriy 17.11.2009, 20:31

Цитата(Elfinit @ 17.11.2009, 23:28) *
А каким боком это к Qt относится??
вроде как тем, что он в приложении на Qt пытается WinAPI использовать :)

Автор: mycoding 17.11.2009, 20:40

Litkevich Yuriy, а моего варианта нет )))
Только то что препод дал

Я просто пока не умею потоки делать на qt
поэтому делаю как получается )))

Автор: Litkevich Yuriy 17.11.2009, 20:42

тема перезжает из Qt, т.к. для начала надо с Си/Си++ разобратся.

mycoding, давай описание (объявление) функции CreateThread, я его не помню.
Разберём всё пополочкам

Автор: mycoding 17.11.2009, 20:48

Я же весь код код кинул , что ещё могу дать ?

Автор: Litkevich Yuriy 17.11.2009, 20:49

Цитата(mycoding @ 17.11.2009, 23:48) *
что ещё могу дать ?
то, что я попросил

Автор: mycoding 17.11.2009, 21:29

Цитата(Litkevich Yuriy @ 17.11.2009, 20:49) *
mycoding, давай описание (объявление) функции CreateThread, я его не помню.
Разберём всё пополочкам


А где я его возьму , я и сам без этого описания всё делаю

Автор: Litkevich Yuriy 17.11.2009, 22:10

mycoding, в документации по WinAPI.

Цитата(mycoding @ 18.11.2009, 0:29) *
я и сам без этого описания всё делаю
потому и получаешь ошибки при компиляции

Автор: mycoding 18.11.2009, 0:07

Ну а почему на codeblockse тоже самое реализованиое через просто winapi работает?

Автор: Litkevich Yuriy 18.11.2009, 9:06

Цитата(mycoding @ 18.11.2009, 3:07) *
на codeblockse тоже самое
не знаю что это такое, еслиб ты отвечал по существу на задаваемые тебе вопросы, уже бы получил работоспособный код.

Автор: mycoding 19.11.2009, 8:58

Короче прога получилось если нужен сорс вот можете взять здесь moc-081.narod.ru/data/oco/oco_3_1_qt.rar
СДелана благодаря очень классному парнишке с этого сайта, который не пожелел время и помог мне. Написана с помощью потоков winapi, если у кого есть желание помочь с потоками на qt
вот моя ася 395712335.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)