提交 e28e6226 编写于 作者: Y yangli

Use boost::atomic(from boost 1.53) or std::atomic to replace the atomic from boost::interprocess;

Use dynamic_cast to replace dynamic_pointer_cast;
Now, the demo file_client from compatible edition need at least boost 1.53, please notice.
上级 83eb9212
......@@ -15,7 +15,7 @@
#define RESTART_COMMAND "restart"
#define REQUEST_FILE "get"
boost::uint32_t completed_client_num;
atomic_ushort completed_client_num;
int link_num = 1;
__off64_t file_size;
......@@ -63,17 +63,17 @@ int main(int argc, const char* argv[])
tokenizer<char_separator<char> > tok(str, sep);
for (BOOST_AUTO(iter, tok.begin()); iter != tok.end(); ++iter)
{
atomic_write32(&completed_client_num, 0);
completed_client_num.store(0);
file_size = 0;
int begin_time = get_system_time().time_of_day().total_seconds();
if (dynamic_pointer_cast<file_client::file_socket>(client.get_client(0))->get_file(*iter))
if (dynamic_cast<file_client::file_socket*>(client.get_client(0).get())->get_file(*iter))
{
for (int i = 1; i < link_num; ++i)
dynamic_pointer_cast<file_client::file_socket>(client.get_client(i))->get_file(*iter);
dynamic_cast<file_client::file_socket*>(client.get_client(i).get())->get_file(*iter);
printf("transfer %s begin.\n", iter->data());
unsigned percent = -1;
while (atomic_read32(&completed_client_num) != (unsigned) link_num)
while (completed_client_num.load() != (unsigned short) link_num)
{
this_thread::sleep(get_system_time() + posix_time::milliseconds(50));
if (file_size > 0)
......@@ -102,7 +102,7 @@ int main(int argc, const char* argv[])
}
}
else
dynamic_pointer_cast<file_client::file_socket>(client.get_client(0))->talk(str);
dynamic_cast<file_client::file_socket*>(client.get_client(0).get())->talk(str);
}
return 0;
......
......@@ -2,13 +2,14 @@
#ifndef FILE_CLIENT_H_
#define FILE_CLIENT_H_
#include <boost/interprocess/detail/atomic.hpp>
using namespace boost::interprocess::ipcdetail;
#include <boost/atomic.hpp>
#include "../include/st_asio_wrapper_client.h"
using namespace st_asio_wrapper;
extern boost::uint32_t completed_client_num;
extern atomic_ushort completed_client_num;
extern int link_num;
extern __off64_t file_size;
/*
protocol:
......@@ -42,9 +43,6 @@ if head equal:
#define __off64_t_format "%lld"
#endif
extern int link_num;
extern __off64_t file_size;
class file_client : public st_client
{
public:
......@@ -115,7 +113,7 @@ public:
}
my_length = 0;
}
void trans_end() {clear(); atomic_inc32(&completed_client_num);}
void trans_end() {clear(); ++completed_client_num;}
void handle_msg(const std::string& str)
{
......@@ -222,7 +220,7 @@ public:
{
__off64_t total_rest_size = 0;
for (BOOST_AUTO(iter, client_can.begin()); iter != client_can.end(); ++iter)
total_rest_size += dynamic_pointer_cast<file_client::file_socket>(*iter)->get_rest_size();
total_rest_size += dynamic_cast<file_client::file_socket*>(iter->get())->get_rest_size();
return total_rest_size;
}
......
......@@ -15,7 +15,7 @@
#define RESTART_COMMAND "restart"
#define REQUEST_FILE "get"
boost::uint32_t completed_client_num;
std::atomic_ushort completed_client_num;
int link_num = 1;
__off64_t file_size;
......@@ -62,17 +62,17 @@ int main(int argc, const char* argv[])
char_separator<char> sep(" \t");
tokenizer<char_separator<char>> tok(str, sep);
do_something_to_all(tok, [&](decltype(*std::begin(tok))& item) {
atomic_write32(&completed_client_num, 0);
completed_client_num.store(0);
file_size = 0;
auto begin_time = get_system_time().time_of_day().total_seconds();
if (dynamic_pointer_cast<file_client::file_socket>(client.get_client(0))->get_file(item))
if (dynamic_cast<file_client::file_socket*>(client.get_client(0).get())->get_file(item))
{
for (auto i = 1; i < link_num; ++i)
dynamic_pointer_cast<file_client::file_socket>(client.get_client(i))->get_file(item);
dynamic_cast<file_client::file_socket*>(client.get_client(i).get())->get_file(item);
printf("transfer %s begin.\n", item.data());
unsigned percent = -1;
while (atomic_read32(&completed_client_num) != (unsigned) link_num)
while (completed_client_num.load() != (unsigned short) link_num)
{
this_thread::sleep(get_system_time() + posix_time::milliseconds(50));
if (file_size > 0)
......@@ -101,7 +101,7 @@ int main(int argc, const char* argv[])
});
}
else
dynamic_pointer_cast<file_client::file_socket>(client.get_client(0))->talk(str);
dynamic_cast<file_client::file_socket*>(client.get_client(0).get())->talk(str);
}
return 0;
......
......@@ -2,13 +2,14 @@
#ifndef FILE_CLIENT_H_
#define FILE_CLIENT_H_
#include <boost/interprocess/detail/atomic.hpp>
using namespace boost::interprocess::ipcdetail;
#include <atomic>
#include "../include/st_asio_wrapper_client.h"
using namespace st_asio_wrapper;
extern boost::uint32_t completed_client_num;
extern std::atomic_ushort completed_client_num;
extern int link_num;
extern __off64_t file_size;
/*
protocol:
......@@ -42,9 +43,6 @@ if head equal:
#define __off64_t_format "%lld"
#endif
extern int link_num;
extern __off64_t file_size;
class file_client : public st_client
{
public:
......@@ -115,7 +113,7 @@ public:
}
my_length = 0;
}
void trans_end() {clear(); atomic_inc32(&completed_client_num);}
void trans_end() {clear(); ++completed_client_num;}
void handle_msg(const std::string& str)
{
......@@ -222,7 +220,7 @@ public:
{
__off64_t total_rest_size = 0;
do_something_to_all([&](decltype(*std::begin(client_can))& item) {
total_rest_size += dynamic_pointer_cast<file_client::file_socket>(item)->get_rest_size();
total_rest_size += dynamic_cast<file_client::file_socket*>(item.get())->get_rest_size();
});
return total_rest_size;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册