WxWidgets с консольным приложением (libtorrent) - PullRequest
0 голосов
/ 25 ноября 2011

Загрузка торрента с помощью libtorrent - это нормально с помощью консольного приложения, но в WxWidgets программа просто зависает и ничего не делает.

#include "main.h"

#include <iostream>
#include <fstream>
#include <iterator>
#include <exception>

#include <string>
#include <sstream>

#include "libtorrent/entry.hpp"
#include "libtorrent/bencode.hpp"
#include "libtorrent/session.hpp"

int torrentDownloadOld(char* torrentURL)
{
    using namespace libtorrent;
#if BOOST_VERSION < 103400
    namespace fs = boost::filesystem;
    fs::path::default_name_check(fs::no_check);
#endif

#ifndef BOOST_NO_EXCEPTIONS
    try
#endif
    {
        session s;
        s.listen_on(std::make_pair(6881, 6889));
        add_torrent_params p;
        p.save_path = "/home/fulluser/Documents/gfx/bin/Debug/";
        p.ti = new torrent_info(torrentURL);
        s.add_torrent(p);

        // wait for the user to end
        //char a;
        //std::cin.unsetf(std::ios_base::skipws);
        //std::cin >> a;
    }
#ifndef BOOST_NO_EXCEPTIONS
    catch (std::exception& e)
    {
        wxString mystring2(e.what(), wxConvUTF8);
        wxMessageBox(mystring2, _("Error"));
    }
#endif
    return 0;
}

Я изменил catch с исходного std::cout << e.what() << "\n"; на окно сообщения и прокомментировал ожидание ввода пользователем.

Я вызываю torrentDownloadOld() при нажатии кнопки в WxWidgets, но ничего не происходит .. Торрент не загружается, и графический интерфейс перестает отвечать на запросы. Примерно через 15 секунд графический интерфейс снова становится отзывчивым, и появляется окно с сообщением «добро пожаловать», но файл нигде не найден. Загрузка даже не началась.

void gfxDialog::OnAbout(wxCommandEvent &event)
{

    std::string torrentURL = "/home/fulluser/Documents/gfx/bin/Debug/test.torrent";
    torrentDownloadOld((char*)torrentURL.c_str());

        //Show welcome to message box when torrent is done.
    wxString msg = wxbuildinfo(long_f);
    wxMessageBox(msg, _("Welcome to..."));
}

Ничего не выводится пользователю (пока), поэтому я не понимаю, почему файл не загружается, когда программа перестает отвечать.

...