Russian Qt Forum
Ноябрь 23, 2024, 05:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: XML-RPC клиент для rTorrent  (Прочитано 22631 раз)
fuCtor
Гость
« Ответ #30 : Март 03, 2009, 16:49 »

Вот, с внесенными изменениями:
http://code.google.com/p/rwin/source/browse/trunk/src/rtorrent/rtorrentio.cpp
Записан
ритт
Гость
« Ответ #31 : Март 03, 2009, 23:17 »

вай-вай...краш при попытке соединиться...

кстати, /RPC2 на сервере откуда должно взяться? у меня рторрент 0.6.4 и накакой вэб-части у него не вижу. /* сильно не пинайте - я с торрентами ещё на "вы" */
Записан
fuCtor
Гость
« Ответ #32 : Март 04, 2009, 07:47 »

http://www.permlug.org/node/3941/ вот тут инструкция о настройке xml-rpc для rtorrent-а
Сам он работает через scgi интерфейс, а если прикрутить сервер то будет как положено.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #33 : Март 04, 2009, 12:39 »

2  fuCtor, посомрел код, нужно сделать небольшие правки:

Код
C++ (Qt)
void RTorrentIO::run(){
       if(InstanceCount == 1)
       {
               client = new Client();
               client->setHost(hostname,port,path);
       }
       exec();
 
       if(!InstanceCount) { //удалеям когда нет ниодного экземпляра потока
           delete client;
           client = 0;
       }
}

Но чесно сказать смонительная реализация RTorrentIO. Меня настараживает использование статического члена
Цитировать
client
. Создается в одном потоке, может быть удален в другом.

Доступ к client никак не защищен:

Код
C++ (Qt)
Client * RTorrentIO::operator ->()
{
       return client;
}

что будет при попытке одновременной модификации данных client? Правильно, ничего хорошего

Также непонятные дейтвия в конструкторе:

Код
C++ (Qt)
....
if(!InstanceCount)
{
   start();
}else
{
   quit();
}
InstanceCount++;
....

Если на то дело пошло, то тогда так:

Код
C++ (Qt)
....
if(!InstanceCount)
{
   start();
}else
{
   quit();
   wait();
}
InstanceCount++;
....

Хотя смысла я непонимаю в этом коде.

Диструктор тоже нужно изменить для корректного завершения потока, примерно так:

Код
C++ (Qt)
RTorrentIO::~RTorrentIO()
{
   if (isRunning()) {
       quit();
       wait();
   }
}

Так что незнаю что вам подсказать, т.к. незнаю что должно быть.
« Последнее редактирование: Март 04, 2009, 12:42 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
fuCtor
Гость
« Ответ #34 : Март 04, 2009, 15:12 »

Идея была в том, чтобы создать один экземпляр потока, в котором будет крутиться соответственно единственный Xml-Rpc клиент. Связь с другими потоками через сигналы. При первом создании указывается настройки для доступа, а в остальных классах просто получаю доступ к уже имеющемуся экземпляру. Когда количество экземпляров будет 0 то уничтожить и client. Вот как-то так. Вот только интересно, будет ли работать обмен быстрее, если каждый класс будет владеть своим экземпляром Сlient  Непонимающий
 
На счет конструктора согласен Улыбающийся.

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #35 : Март 04, 2009, 15:31 »

Вот только интересно, будет ли работать обмен быстрее, если каждый класс будет владеть своим экземпляром Сlient  Непонимающий

Попробкйте, т.к. текущая реализация неверна, имхо.


На счет конструктора согласен Улыбающийся.

Более того, я бы сказал, что потоки все после первого (с InstanceCount >1) будут совершено бесполезны, т.к. они будут незапущены. start() вызывается только для первого потока.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.137 секунд. Запросов: 23.