crossplatform.ru

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

> Помогите разобраться c передачей данных по сети!, создание двух потоков
PVGDRK
  опции профиля:
сообщение 24.9.2010, 15:35
Сообщение #1


Студент
*

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

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




Репутация:   0  


Имеется программа, которая выполняет следующие действия,
динамически выделяется оперативная память для хранения очень большого массива данных далее эти данные по сети посылаются в другой компутер,,, При передаче данных по сети вся система начинает тормозить. программу невозможно закрыть до тех пор пока не закончится эта передача .,,,
В общем посоветовали мне передачу данных организовать не в основном потоке...
поскольку опыта программирования у меня почти нет - приходиться учиться по ходу дела буду всем признательна за помощь
поможет ли избавиться от "тормозов" организация многопоточности - может есть какие то решения по-проще?
Далее вопрос про сам принцип организации этой многопоточности
в книге пишут,что нужно создать класс QThread и перезаписать в нем виртуальный метод run(), в котором должен быть реализован код, который будет исполняться в потоке
class MyThread:public QThread
{
   public:
   void run()
    {
      код исполняемый в потоке
     }
}

Суть вроде ясна, а вот как переменные и соединения сигнал-слот из базового класса перенести в этот метод run()?
Может я не совсем корректно что то написала.т.к. не разбираюсь в данном вопросе.... сама программа передачи данных была написана другим человеком на С , мне лишь нужно было сделать для нее графический интерфейс в QT и кое чего добавть...
помогите пожалуйста разобраться в данном вопросе
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
PVGDRK
  опции профиля:
сообщение 1.10.2010, 11:59
Сообщение #2


Студент
*

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

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




Репутация:   0  


Цитата
Точнее сказать: экземпляр класса CMyClass создан в основном потоке. И по совместительству, как понимаю, этот класс у тебя - класс главного окна ?

Да так и есть. только у меня в программе он называется не CMyClass а Generator, но суть от этого не меняется...
Итак, сам код: файл generator.cpp
extern "C" __declspec (dllimport) int Create30000000(WaveformDataReal **bS); //  Функции написанные в DLL файле
extern "C" __declspec (dllimport) int Add30000000(FILE *fin,float freq, float SNR);

Generator::Generator(QWidget *parent, Qt::WFlags flags)   // Конструктор
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    createFilesTable();
    Disable();
}
Generator::~Generator()                                    // Деструктор
{
    CloseAWG();
}
//Далее идут  функции  и обработчики соединения сигнал слот
.......
//Один  из них:

void Generator::on_pushButton_5_clicked()
{
     int t=0;
     int n=0;
     int p=0;
     int x1,x2,y1,y2;
     QString str_filename;
     QString str_txt;
     QByteArray ar;
     char* datatext;
     char str[128];
     WaveformDataReal *bS; //  bS - это  тот  массив,который находится в оперативной памяти
     float freq, SNR;
     FILE *F_1;
     bool ok;
     float Value=0;
,,,,,,
// Далее как я понимаю  идет  функция формирования этого  массива путем обращения к
// Create30000000(&bS) и Add30000000(F_1, freq, SNR)
// Далее данные из  сформированного  массива можно либо отправить  по  сети, либо  сохранить  в файл...
// Я пока пытаюсь  в потоке QThread выполнить  сохранение в файл  поэтому  вот  этот  код вставляю  в потоке QThread

if(ui.checkBox_File->checkState()==Qt::Checked)   // Запись  в файл
        {
            if(pPBar!=NULL) pPBar->setWindowTitle(tr("Write file"));

            FILE *F_2;
            str_txt = ui.lineEdit_NameF->text();
            ar = str_txt.toAscii();
            datatext=ar.data();
            F_2=fopen(datatext,"wb");
            for(int j=0;j<100;j++)
            {
                fwrite((bS+j*300000),sizeof(WaveformDataReal),300000,F_2);
                if(pPBar!=NULL)    pPBar->setValue(j);
                Sleep(10);
            }
            fclose(F_2);
        }
}
//Далее пишу

class MyThread:public QThread
{
    Generator*m_pData;
    
public:
    MyThread(Generator*m_pData=0):m_pData(m_pData) // Здесь  очевидно  ошибка из-за моего непонимания m_pData - указатель н а мой класс  или какая то переменная или функция из  класса Generator?
    {
    }
    void run()           //Если в этой функции  не писать  ниже приведенный код - то  все компилируется,  а скодом ругается на переменные что они не определены ...  а как правильно  все это  пишется я не знаю
    {
        if(m_pData)
        {
            m_pData-> // здесь не совсем поняла,что нужно писать поэтому ничего не писала
        }

        if(ui.checkBox_File->checkState()==Qt::Checked)   // Запись  в файл
        {
            if(pPBar!=NULL) pPBar->setWindowTitle(tr("Write file"));
            
            FILE *F_2;
            str_txt = ui.lineEdit_NameF->text();
            ar = str_txt.toAscii();
            datatext=ar.data();
            F_2=fopen(datatext,"wb");
            for(int j=0;j<100;j++)
            {
                fwrite((bS+j*300000),sizeof(WaveformDataReal),300000,F_2);
                if(pPBar!=NULL)    pPBar->setValue(j);
                Sleep(10);
            }
            fclose(F_2);
        }
        }

Вот примерно так....
Подскажите,пожалуйста, как правильно написать :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- PVGDRK   Помогите разобраться c передачей данных по сети!   24.9.2010, 15:35
- - Алексей1153   Цитата(PVGDRK @ 24.9.2010, 18:35) поможет...   24.9.2010, 18:34
- - PVGDRK   Спасибо за разъяснения. Я примерно так и предпола...   24.9.2010, 19:09
- - Алексей1153   Цитата(PVGDRK @ 24.9.2010, 22:09) А вот к...   24.9.2010, 19:21
- - PVGDRK   Это мне понятно, а как в этом классе QThread ис...   24.9.2010, 20:12
- - Алексей1153   PVGDRK, заведи в классе потока приватную член -пер...   24.9.2010, 20:19
- - PVGDRK   Ох, спасибо Про переменные почитаю - спасибо ,...   24.9.2010, 20:28
- - Алексей1153   PVGDRK, железки - обычно однопоточные, поэтому в н...   24.9.2010, 20:38
- - PVGDRK   Спасибо большое за разъяснения. В понедельник буд...   24.9.2010, 23:29
- - Алексей1153   а в выходные не будешь ? )   24.9.2010, 23:41
- - PVGDRK   Не , в выходные не получится - нет сети дома, да...   25.9.2010, 18:19
- - Гость_xls_*   Почитайте http://doc.qt.nokia.com/qq/qq27-responsi...   27.9.2010, 9:43
- - PVGDRK   Mercie beaucoup ( Большое спасибо ) Заодно и анг...   27.9.2010, 10:15
- - Алексей1153   Цитата(PVGDRK @ 27.9.2010, 13:15) Заодно ...   27.9.2010, 10:42
- - PVGDRK   Простите меня бестолковую, пожалуйста, помогите п...   30.9.2010, 15:35
- - Алексей1153   Цитата(PVGDRK @ 30.9.2010, 18:35) Простит...   1.10.2010, 6:27
- - PVGDRK   ЦитатаТочнее сказать: экземпляр класса CMyClass со...   1.10.2010, 11:59
- - Алексей1153   а где у тебя экземпляр MyThread создаётся ? по ме...   1.10.2010, 12:08
- - PVGDRK   Да к ui доступ есть псоле записи ui. выпадает сп...   1.10.2010, 12:36
- - Алексей1153   PVGDRK, так, стоп! "какие-то" - это ...   1.10.2010, 12:38
- - PVGDRK   Не, я так понимаю совсем не в конструкторе моег...   1.10.2010, 12:57
- - Алексей1153   PVGDRK, поиском я не нашёл, где у тебя создаётся э...   1.10.2010, 13:05
- - PVGDRK   Я так понимаю у меня вообще не создается экземпляр...   1.10.2010, 13:14
- - Алексей1153   Цитата(PVGDRK @ 1.10.2010, 16:14) Я так п...   1.10.2010, 13:22
- - PVGDRK   Если я все вырежу - то Вы мне тогда не сможете п...   1.10.2010, 13:34
- - Алексей1153   PVGDRK, ладно, щас набросаю схемку. Но! Срочно...   1.10.2010, 13:36
|- - Алексей1153   файл MyThread.h Раскрывающийся текст#pragma once #...   1.10.2010, 13:47
- - PVGDRK   Так я читаю - видно плохо понимаю что пишут......   1.10.2010, 13:39
- - PVGDRK   Безмерно Вам благодарна за подробный ответ Нечт...   1.10.2010, 14:08
- - PVGDRK   Помогите теперь, пожалуйста понять, как это рабо...   6.10.2010, 11:07
- - Алексей1153   Цитата(PVGDRK @ 6.10.2010, 14:07) thread....   6.10.2010, 11:18
- - PVGDRK   Да при нажатии на кнопку pushButton_5 в другом по...   6.10.2010, 12:05
- - Алексей1153   Цитата(PVGDRK @ 6.10.2010, 15:05) не знаю...   6.10.2010, 12:33
- - PVGDRK   так они у меня и так в cpp файле генератора опис...   6.10.2010, 15:08
- - Алексей1153   PVGDRK, "до конструктора" - это, я так п...   6.10.2010, 17:42
- - PVGDRK   Спасибо Вам добрый человек за терпение и внимание ...   7.10.2010, 8:18
- - Алексей1153   PVGDRK, я на самом деле злой, я ж из Обливиона )) ...   7.10.2010, 19:25


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


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




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