Форум программистов, компьютерный форум CyberForum.ru

Слишком быстрый инпут - C++

Восстановить пароль Регистрация
 
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 90
24.07.2015, 14:06     Слишком быстрый инпут #1
И так, я пишу программу для передачи потока через медленный радиопередатчик(заявленный максимум 10кб/с, но на деле по-моему меньше). Пишу под линукс для Raspberry Pi. Основана на этом - https://github.com/ninjablocks/433Utils . Выглядит она так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <termios.h>
 
using namespace std;
 
char getch()
{
  struct termios old, neue;
  char ch;
  tcgetattr(0, &old);
  neue = old;
  neue.c_lflag &= ~ICANON;
  neue.c_lflag &= ~ECHO;
  tcsetattr(0, TCSANOW, &neue);
  ch = getchar();
  tcsetattr(0, TCSANOW, &old);
  return ch;
}
 
int main(int argc, char *argv[]) {
 
  int PIN = 0;
 
  int tmp;
 
  if (wiringPiSetup () == -1) return 1;
 
  RCSwitch mySwitch = RCSwitch();
  mySwitch.enableTransmit(PIN);
  mySwitch.setRepeatTransmit(10);
 
  int c;
  while(1) {
    c = getch();
    mySwitch.send(c, 24);
  }
 
  return 0;
 
}
Вроде всё нормально и команда типа
Bash
1
echo "hi" | sudo ./tx
работает, но когда дело доходит до большого количества типа dmesg, то оно просто не успевает... Как это исправить? Я думаю нужно что-то типо промежуточного места хранения, но не знаю как это организовать(ибо пишу почти всегда на java). Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2015, 14:06     Слишком быстрый инпут
Посмотрите здесь:

C++ Быстрый Вопрос
Быстрый вызов C++
Быстрый почтальон C++
слишком много инициализаторов C++
C++ быстрый xor
Быстрый поиск C++
Быстрый сплит C++
C++ Быстрый аллокатор

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
24.07.2015, 14:49     Слишком быстрый инпут #2
По видимому тут вам поможет, что то типо очереди которая будет содержать куски информации нужного размера
C++
1
2
3
4
5
6
7
8
while(mySwith.isSend()){ // отправляем до тех пор пока открыт передачик
   if(!buffer.isEmpty()){ //если буфер не пустой
      mySwitch.send(buffer.pop()); // изьять сообщение(которое уже нужногог размера) из буфера и отправить на передачу
   else{
     std::cout << "передавайть пока нечего, ожидаем данные" << std::endl;
}
}
}
sssemil
3 / 3 / 1
Регистрация: 29.01.2013
Сообщений: 90
24.07.2015, 15:02  [ТС]     Слишком быстрый инпут #3
egor2116, а мне не нужно для этого создавать отдельную задачу(процесс), где один считывает все постоянно в буфер, а другой постоянно высылает из буфера? mySwitch.send занимает достаточно много времени.
Yandex
Объявления
24.07.2015, 15:02     Слишком быстрый инпут
Ответ Создать тему
Опции темы

Текущее время: 10:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru