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++
		
	
| 
								 
											3 years ago
										 
									 | 
							
								// 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
							 |