使用控制台应用程序使用libtorrent下载torrent是很好的,但在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";
更改为消息框,并注释了等待用户输入。
我在WxWidgets按下按钮时调用torrentDownloadOld()
,但没有任何反应..没有下载torrent,GUI也没有响应。大约15秒后,GUI再次响应,弹出“欢迎”消息框,但文件无处可寻。下载甚至从未开始。
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..."));
}
没有任何内容正在输出给用户,所以我不明白为什么在程序没有响应的情况下没有下载文件。