int main() { BOOST_THREAD_LOG << BOOST_THREAD_END_LOG; { typedef boost::chrono::high_resolution_clock Clock; { typedef int T; boost::promise<T> p; boost::shared_future<T> f((p.get_future())); #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) boost::thread(func1, boost::move(p)).detach(); #endif BOOST_TEST(f.valid()); BOOST_TEST_EQ(f.wait_until(Clock::now() + ms(300)) , boost::future_status::timeout); #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) #else func1(boost::move(p)); #endif BOOST_TEST(f.valid()); BOOST_TEST_EQ(f.wait_until(Clock::now() + ms(300)) , boost::future_status::ready); BOOST_TEST(f.valid()); Clock::time_point t0 = Clock::now(); f.wait(); Clock::time_point t1 = Clock::now(); BOOST_TEST(f.valid()); BOOST_TEST(t1 - t0 < ms(50)); } { typedef int& T; boost::promise<T> p; boost::shared_future<T> f((p.get_future())); #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) boost::thread(func3, boost::move(p)).detach(); #endif BOOST_TEST(f.valid()); BOOST_TEST_EQ(f.wait_until(Clock::now() + ms(300)) , boost::future_status::timeout); BOOST_TEST(f.valid()); #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) #else func3(boost::move(p)); #endif BOOST_TEST_EQ(f.wait_until(Clock::now() + ms(300)) , boost::future_status::ready); BOOST_TEST(f.valid()); Clock::time_point t0 = Clock::now(); f.wait(); Clock::time_point t1 = Clock::now(); BOOST_TEST(f.valid()); BOOST_TEST(t1 - t0 < ms(50)); } { typedef void T; boost::promise<T> p; boost::shared_future<T> f((p.get_future())); #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) boost::thread(func5, boost::move(p)).detach(); #endif BOOST_TEST(f.valid()); BOOST_TEST_EQ(f.wait_until(Clock::now() + ms(300)) , boost::future_status::timeout); BOOST_TEST(f.valid()); #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) #else func5(boost::move(p)); #endif BOOST_TEST_EQ(f.wait_until(Clock::now() + ms(300)) , boost::future_status::ready); BOOST_TEST(f.valid()); Clock::time_point t0 = Clock::now(); f.wait(); Clock::time_point t1 = Clock::now(); BOOST_TEST(f.valid()); BOOST_TEST(t1 - t0 < ms(50)); } } BOOST_THREAD_LOG << BOOST_THREAD_END_LOG; return boost::report_errors(); }
void filter(int *array, int X, int Y, int Z, int * seed, int N, FILE *ofp){ long long func_start = get_time(); double xr = round(Y/2.0); double yr = round(X/2.0); int radius = 5; int diameter = radius*2-1; int *radiusMatrix = (int *)malloc(diameter*diameter*sizeof(int)); fillMatrix(radiusMatrix, radius); int Ones = 0; int x, y; for(x = 0; x < diameter; x++){ for(y = 0; y < diameter; y++){ if(radiusMatrix[x*diameter + y] == 1) Ones++; } } double * objxy = (double *)malloc(Ones*2*sizeof(double)); getNeighbors(radiusMatrix, Ones, objxy, radius); double *weights = (double *)malloc(sizeof(double)*N); double *arrayX = (double *)malloc(sizeof(double)*N); double *arrayY = (double *)malloc(sizeof(double)*N); func0(weights, arrayX, arrayY, xr, yr, N); double * probability = (double *)malloc(sizeof(double)*N); double * x_j = (double *)malloc(sizeof(double)*N); double * y_j = (double *)malloc(sizeof(double)*N); double * cfd = (double *)malloc(sizeof(double)*N); double * u = (double *)malloc(sizeof(double)*N); int * index = (int*)malloc(sizeof(int)*Ones*N); int i, j; for(i = 1; i < Z; i++) { func1(seed, array, arrayX, arrayY, probability, objxy, index, Ones, i, X, Y, Z, N); func2(weights, probability, N); double x_e = 0; double y_e = 0; func3(arrayX, arrayY, weights, &x_e, &y_e, N); fprintf(ofp, "%f\n", x_e); fprintf(ofp, "%f\n", y_e); cfd[0] = weights[0]; for(j = 1; j < N; j++){ cfd[j] = weights[j] + cfd[j-1]; } double u1 = (1/((double)(N)))*rand1(seed, 0); func4(u, u1, N); func5(x_j, y_j, arrayX, arrayY, weights, cfd, u, N); } long long func_end = get_time(); printf("FUNC TIME : %f\n", elapsed_time(func_start, func_end)); //fflush(); for(i=0; i<Ones*2; i++) { fprintf(ofp, "%f\n", objxy[i]); } for(i=0; i<N; i++) { fprintf(ofp, "%f %f %f %f %f %f %f %f\n", weights[i], arrayX[i], arrayY[i], probability[i], x_j[i], y_j[i], cfd[i], u[i]); } for(i=0; i<Ones*N; i++) { fprintf(ofp, "%d\n", index[i]); } free(radiusMatrix); free(objxy); free(weights); free(probability); free(x_j); free(y_j); free(arrayX); free(arrayY); free(cfd); free(u); free(index); }