diff options
Diffstat (limited to 'shared/check_exist.cpp')
-rw-r--r-- | shared/check_exist.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/shared/check_exist.cpp b/shared/check_exist.cpp index fcb865fd..8bc629b5 100644 --- a/shared/check_exist.cpp +++ b/shared/check_exist.cpp @@ -1,34 +1,42 @@ +// ************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * +// * Copyright (C) 2008-2010 ZenJu (zhnmju123 AT gmx.de) * +// ************************************************************************** +// #include "check_exist.h" #include "file_handling.h" -#include <boost/thread.hpp> +#include "boost_thread_wrap.h" //include <boost/thread.hpp> #include <boost/shared_ptr.hpp> +/* #ifdef __MINGW32__ //oh well, nothing is for free... //https://svn.boost.org/trac/boost/ticket/4258 -#warning fix this issue at some time... -extern "C" void tss_cleanup_implemented() {} +extern "C" void tss_cleanup_implemented() {}; #endif - +*/ namespace { +typedef Zbase<Zchar, StorageDeepCopy> BasicString; //thread safe string class + template <bool (*testExist)(const Zstring&)> class ExistenceChecker { public: - ExistenceChecker(const Zstring& filename, const boost::shared_ptr<bool>& isExisting) : - filename_(filename.c_str()), //deep copy: worker thread may run longer than main! avoid shared data - isExisting_(isExisting) {} //not accessed during thread run + ExistenceChecker(const BasicString& filename, const boost::shared_ptr<bool>& isExisting) : + filename_(filename), //deep copy: worker thread may run longer than main! avoid shared data + isExisting_(isExisting) {} //not accessed during thread run void operator()() { - *isExisting_ = testExist(filename_); //throw() + *isExisting_ = testExist(filename_.c_str()); //throw() } private: - const Zstring filename_; //no reference, lifetime not known + const BasicString filename_; //no referencing, 'cause lifetime not known! boost::shared_ptr<bool> isExisting_; }; @@ -40,8 +48,8 @@ util::ResultExist checkExistence(const Zstring& objName, size_t timeout) //timeo boost::shared_ptr<bool> isExisting(new bool(false)); - ExistenceChecker<fun> task(objName, isExisting); - boost::thread worker(task); + ExistenceChecker<fun> task(objName.c_str(), isExisting); + boost::thread worker(task); //note: task is copied => using thread safe string! if (worker.timed_join(boost::posix_time::milliseconds(timeout))) return *isExisting ? EXISTING_TRUE : EXISTING_FALSE; @@ -56,7 +64,7 @@ util::ResultExist checkExistence(const Zstring& objName, size_t timeout) //timeo #warning migrate this at some time... #endif /* - unfortunately packaged_task/future is not mature enough to be used... + unfortunately packaged_task/future is not mature enough to be used... boost::packaged_task<bool> pt(boost::bind(fun, objName.c_str())); //attention: Zstring is not thread-safe => make deep copy boost::unique_future<bool> fut = pt.get_future(); |