The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"можно ли запустить метод объекта нитью (thread) ?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"можно ли запустить метод объекта нитью (thread) ?"  
Сообщение от pyatak (ok) on 28-Мрт-06, 19:55 
Скачал библиотеку с классом для работы с ком портом ( http://xor-011.narod.ru/programming/comport.rar  4 KB:) Она не компилируется (Asp 10, KDevelop).

В библиотеке описан такой класс ComPort:


class ComPort : public QObject
{
          .....................
    bool Open(int lNumPort,int lSpeed, int lSize, eParity lParity, bool lStopBit,   eProtocol lProtocol);
...........................................
    
    void* slotReadThreadNON(void*);
    
    void* slotReadThreadQPD(void*);
    
    void* slotReadThreadQSU(void*);

.......................................


В методе open должен запускаться либо slotReadThreadNON, либо slotReadThreadQPD,
либо slotReadThreadQSU как thread с помощью pthread_create из <pthread.h> :


bool ComPort::Open(int lNumPort, int lSpeed, int lSize, eParity lParity, bool lStopBit, eProtocol lProtocol)
{

..............................................

    switch (lProtocol)
    {
      case qpd:
        if (pthread_create(&read_thread,NULL,ComPort::slotReadThreadQPD,this)!=0)
//          {cerr <<"\nError - on create thread\n";};
        return true;
        break;
      case qsu:
        if (pthread_create(&read_thread,NULL,ComPort::slotReadThreadQSU,this)!=0)
//          {cerr <<"\nError - on create thread\n";};
        return true;
............................................................................

но компилятор ругается :
comport.cpp: In member function `bool ComPort::Open(int, int, int, eParity,
bool, eProtocol)':
comport.cpp:62: error: no matches converting function `slotReadThreadQPD' to
type `void*(*)(void*)'
comport.h:68: error: candidates are: void* ComPort::slotReadThreadQPD(void*)
comport.cpp:67: error: no matches converting function `slotReadThreadQSU' to
type `void*(*)(void*)'
comport.h:70: error: candidates are: void* ComPort::slotReadThreadQSU(void*)
comport.cpp:72: error: no matches converting function `slotReadThreadNON' to
type `void*(*)(void*)'
comport.h:66: error: candidates are: void* ComPort::slotReadThreadNON(void*)


Глобальные функции запускаются нормально. Если описАть slotReadThreadNON, slotReadThreadQPD, slotReadThreadQSU , как static или friend , то эти ошибки пропадают, но, естественно, появляется куча других, связанных с вызовом методов ComPort из slotReadThreadNON, slotReadThreadQPD, slotReadThreadQSU.


Возможно ли вообще запускать метод объекта нитью ? А метод класса?  
Заранее спасибо!



Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "можно ли запустить метод объекта нитью (thread) ?"  
Сообщение от gyn61 (ok) on 28-Мрт-06, 23:30 
class ComPort : public QObject
{
          .....................
    bool Open(int lNumPort,int lSpeed, int lSize, eParity lParity, bool lStopBit, eProtocol lProtocol);
...........................................

    void* slotReadThreadNON();
    static void* slotReadThreadNON_S(void *ob) {
       return ((ComPotr *)ob)->slotReadThreadNON();
    }

    void* slotReadThreadQPD();
    static void* slotReadThreadQPD_S(void *ob) {
       return ((ComPotr *)ob)->slotReadThreadQPD();
    }

    void* slotReadThreadQSU();
    static void* slotReadThreadQSU_S(void *ob) {
       return ((ComPotr *)ob)->slotReadThreadQSU();
    }

.......................................

bool ComPort::Open(int lNumPort, int lSpeed, int lSize, eParity lParity, bool lStopBit, eProtocol lProtocol)
{

..............................................

    switch (lProtocol)
    {
      case qpd:
        if (pthread_create(&read_thread,NULL,slotReadThreadQPD_S,this)!=0)
          {cerr <<"\nError - on create thread\n";};
        return true;
        break;
      case qsu:
        if (pthread_create(&read_thread,NULL,slotReadThreadQSU_S,this)!=0)
          {cerr <<"\nError - on create thread\n";};
        return true;
............................................................................

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "можно ли запустить метод объекта нитью (thread) ?"  
Сообщение от pyatak (??) on 29-Мрт-06, 23:47 
Спасибо ! небольшая поправка :

...........................................

       void* slotReadThreadNON(void*);
       static void* slotReadThreadNON_S(void *ob) {
        return ((ComPort *)ob)->slotReadThreadNON(ob);
        }
            
       void* slotReadThreadQPD(void*);
       static void* slotReadThreadQPD_S(void *ob) {
         return ((ComPort *)ob)->slotReadThreadQPD(ob);
        }
        
       void* slotReadThreadQSU(void*);
       static void* slotReadThreadQSU_S(void *ob) {
          return ((ComPort *)ob)->slotReadThreadQSU(ob);
       }

............................................................

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "можно ли запустить метод объекта нитью (thread) ?"  
Сообщение от kir (??) on 30-Мрт-06, 13:03 

описать методы static

ps: man c++

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру