You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
// This file is part of OpenCV project.
 | 
						|
// It is subject to the license terms in the LICENSE file found in the top-level directory
 | 
						|
// of this distribution and at http://opencv.org/license.html.
 | 
						|
 | 
						|
#ifndef OPENCV_CORE_ASYNC_HPP
 | 
						|
#define OPENCV_CORE_ASYNC_HPP
 | 
						|
 | 
						|
#include <opencv2/core/mat.hpp>
 | 
						|
 | 
						|
#ifdef CV_CXX11
 | 
						|
//#include <future>
 | 
						|
#include <chrono>
 | 
						|
#endif
 | 
						|
 | 
						|
namespace cv {
 | 
						|
 | 
						|
/** @addtogroup core_async
 | 
						|
 | 
						|
@{
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/** @brief Returns result of asynchronous operations
 | 
						|
 | 
						|
Object has attached asynchronous state.
 | 
						|
Assignment operator doesn't clone asynchronous state (it is shared between all instances).
 | 
						|
 | 
						|
Result can be fetched via get() method only once.
 | 
						|
 | 
						|
*/
 | 
						|
class CV_EXPORTS_W AsyncArray
 | 
						|
{
 | 
						|
public:
 | 
						|
    ~AsyncArray() CV_NOEXCEPT;
 | 
						|
    CV_WRAP AsyncArray() CV_NOEXCEPT;
 | 
						|
    AsyncArray(const AsyncArray& o) CV_NOEXCEPT;
 | 
						|
    AsyncArray& operator=(const AsyncArray& o) CV_NOEXCEPT;
 | 
						|
    CV_WRAP void release() CV_NOEXCEPT;
 | 
						|
 | 
						|
    /** Fetch the result.
 | 
						|
    @param[out] dst destination array
 | 
						|
 | 
						|
    Waits for result until container has valid result.
 | 
						|
    Throws exception if exception was stored as a result.
 | 
						|
 | 
						|
    Throws exception on invalid container state.
 | 
						|
 | 
						|
    @note Result or stored exception can be fetched only once.
 | 
						|
    */
 | 
						|
    CV_WRAP void get(OutputArray dst) const;
 | 
						|
 | 
						|
    /** Retrieving the result with timeout
 | 
						|
    @param[out] dst destination array
 | 
						|
    @param[in] timeoutNs timeout in nanoseconds, -1 for infinite wait
 | 
						|
 | 
						|
    @returns true if result is ready, false if the timeout has expired
 | 
						|
 | 
						|
    @note Result or stored exception can be fetched only once.
 | 
						|
    */
 | 
						|
    bool get(OutputArray dst, int64 timeoutNs) const;
 | 
						|
 | 
						|
    CV_WRAP inline
 | 
						|
    bool get(OutputArray dst, double timeoutNs) const { return get(dst, (int64)timeoutNs); }
 | 
						|
 | 
						|
    bool wait_for(int64 timeoutNs) const;
 | 
						|
 | 
						|
    CV_WRAP inline
 | 
						|
    bool wait_for(double timeoutNs) const { return wait_for((int64)timeoutNs); }
 | 
						|
 | 
						|
    CV_WRAP bool valid() const CV_NOEXCEPT;
 | 
						|
 | 
						|
#ifdef CV_CXX11
 | 
						|
    inline AsyncArray(AsyncArray&& o) { p = o.p; o.p = NULL; }
 | 
						|
    inline AsyncArray& operator=(AsyncArray&& o) CV_NOEXCEPT { std::swap(p, o.p); return *this; }
 | 
						|
 | 
						|
    template<typename _Rep, typename _Period>
 | 
						|
    inline bool get(OutputArray dst, const std::chrono::duration<_Rep, _Period>& timeout)
 | 
						|
    {
 | 
						|
        return get(dst, (int64)(std::chrono::nanoseconds(timeout).count()));
 | 
						|
    }
 | 
						|
 | 
						|
    template<typename _Rep, typename _Period>
 | 
						|
    inline bool wait_for(const std::chrono::duration<_Rep, _Period>& timeout)
 | 
						|
    {
 | 
						|
        return wait_for((int64)(std::chrono::nanoseconds(timeout).count()));
 | 
						|
    }
 | 
						|
 | 
						|
#if 0
 | 
						|
    std::future<Mat> getFutureMat() const;
 | 
						|
    std::future<UMat> getFutureUMat() const;
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
    // PImpl
 | 
						|
    struct Impl; friend struct Impl;
 | 
						|
    inline void* _getImpl() const CV_NOEXCEPT { return p; }
 | 
						|
protected:
 | 
						|
    Impl* p;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//! @}
 | 
						|
} // namespace
 | 
						|
#endif // OPENCV_CORE_ASYNC_HPP
 |