crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Немного WinApi в Qt
Andrewshkovskii
  опции профиля:
сообщение 24.3.2009, 15:44
Сообщение #1


Активный участник
***

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

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




Репутация:   1  


Есть такой вот код,
void Test1Widget::saveAnswer()//слот, вызывает по нажатию кнопочки.
{
InitializeCriticalSection(&crit);
bool b;
tHandle=CreateThread(NULL,0,LPTHREAD_START_ROUTINE(saveAnswerThread),b,0,&tId);
}


DWORD Test1Widget::saveAnswerThread(bool b)//функция
{
QFile resfile("Results.dat");
    if(!resfile.open(QIODevice::Append))
    {
        dbReadError->setText("Произошла ошибка файл создания базы ответов.");
        dbReadError->setInformativeText("По каким-то причинам программе не удалось создать файл базы ответов.Программа будет завершена.");
        dbReadError->exec();
    }
     QTextStream filestream(&resfile);
        filestream << this->ColorList[CurrentColorTask] << " " << this->red <<" " <<  this->green << " "<< this->blue << endl;
}


Пытаюсь компилировать это всё в QtCreator.
Выдает ошибку :
C:/storage/programming/workspace/ColorTest/test1widget.cpp:198: error: argument of type `DWORD (Test1Widget:: )(bool)' does not match `DWORD (*)(void*)'

Раньше(когда писал под Eclipse) эту проблему решал с помощью приведения типа возвращаемого значения функции к LPTHREAD_START_ROUTINE, но сейчас что-то не выходит.
Использовать средства многопоточности Qt в данный момент мне не нужно, необходимо решить проблему с WinApi, если это возможно.
Так в чем может быть проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 24.3.2009, 16:09
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Раскрывающийся текст
DWORD Test1Widget::saveAnswerThread(bool b)//функция
{
QFile resfile("Results.dat");
    if(!resfile.open(QIODevice::Append))
    {
        dbReadError->setText("Произошла ошибка файл создания базы ответов.");
        dbReadError->setInformativeText("По каким-то причинам программе не удалось создать файл базы ответов.Программа будет завершена.");
        dbReadError->exec();
    }
     QTextStream filestream(&resfile);
        filestream << this->ColorList[CurrentColorTask] << " " << this->red <<" " <<  this->green << " "<< this->blue << endl;
}


а где непосредственно возвращается значение? где ключевое слово return????

Сообщение отредактировал kwisp - 24.3.2009, 16:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 24.3.2009, 16:21
Сообщение #3


Активный участник
***

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

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




Репутация:   1  


бр, забыл. просто этот код сначала был в методе обычном, а потом понадобилось его сунуть в поток, вот при копипасте и забыл добавить.
Кстате, не поможет это всеравно, видимо нельзя вызывать метод как отдельный поток.

Сообщение отредактировал Andrewshkovskii - 24.3.2009, 16:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 18.11.2009, 0:05
Сообщение #4


Студент
*

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

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




Репутация:   0  


Ребята у меня тот же самый вопрос, можете помоч, а то непонятно как вы его решили?
У меня в функции есть return но ндело не в нём
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 18.11.2009, 0:18
Сообщение #5


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Все написано в сообщении компилятора:
error: argument of type `DWORD (Test1Widget:: )(bool)' does not match `DWORD (*)(void*)'

Функция CreateThread ждет в качестве параметра указатель на функцию:
DWORD saveAnswerThread( void * );

Ты ей пытаешься подсунуть:
DWORD Test1Widget::saveAnswerThread( bool );

Разница между ними ясна?
Если нет, нужно почитать книги по C++ на эту тему.

Функция saveAnswerThread либо должна быть static, либо быть глобальной (т.е. не членом класса).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 18.11.2009, 1:06
Сообщение #6


Активный участник
***

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

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




Репутация:   1  


Свою то я проблему решил давно ещё, и его, тоже решил сейчас:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 19.11.2009, 9:00
Сообщение #7


Студент
*

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

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




Репутация:   0  


Короче прога получилось если нужен сорс вот можете взять здесь moc-081.narod.ru/data/oco/oco_3_1_qt.rar
СДелана благодаря очень классному парнишке с этого сайта, который не пожелел время и помог мне. Написана с помощью потоков winapi, если у кого есть желание помочь с потоками на qt
вот моя ася 395712335.
ОГРОМНЕЙШЕЕ СПАСИБО Andrewshkovskii!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 2:03