crossplatform.ru

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


  Ответ в Немного WinApi в Qt
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
mycoding Дата 19.11.2009, 9:00
  Короче прога получилось если нужен сорс вот можете взять здесь moc-081.narod.ru/data/oco/oco_3_1_qt.rar
СДелана благодаря очень классному парнишке с этого сайта, который не пожелел время и помог мне. Написана с помощью потоков winapi, если у кого есть желание помочь с потоками на qt
вот моя ася 395712335.
ОГРОМНЕЙШЕЕ СПАСИБО Andrewshkovskii!!!
Andrewshkovskii Дата 18.11.2009, 1:06
  Свою то я проблему решил давно ещё, и его, тоже решил сейчас:)
BRE Дата 18.11.2009, 0:18
  Все написано в сообщении компилятора:
error: argument of type `DWORD (Test1Widget:: )(bool)' does not match `DWORD (*)(void*)'

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

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

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

Функция saveAnswerThread либо должна быть static, либо быть глобальной (т.е. не членом класса).
mycoding Дата 18.11.2009, 0:05
  Ребята у меня тот же самый вопрос, можете помоч, а то непонятно как вы его решили?
У меня в функции есть return но ндело не в нём
Andrewshkovskii Дата 24.3.2009, 16:21
  бр, забыл. просто этот код сначала был в методе обычном, а потом понадобилось его сунуть в поток, вот при копипасте и забыл добавить.
Кстате, не поможет это всеравно, видимо нельзя вызывать метод как отдельный поток.
kwisp Дата 24.3.2009, 16:09
 
Раскрывающийся текст
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????
Andrewshkovskii Дата 24.3.2009, 15:44
  Есть такой вот код,
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, если это возможно.
Так в чем может быть проблема?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 16:36