On 03/17/2015 09:23 PM, Sze Howe Koh wrote: > >> Well, my situation already needs me to poll objects periodically. >> The following is indicative of my problem: >> >> while(1) >> { >> for(all_objects) >> { >> ret = object[i]->execute() >> if(ret == complete) all_objects.remove( object[i] ); >> } >> >> sleep(1ms); >> } >> >> Now, object::execute() is supposed to get its work done by calling >> do_something(). >> execute() should not block but do_something() is blocking. That's why I >> need to call it in a separate thread. >> Till do_something() completes, subsequent calls to execute() shall >> return a value indicating that it's execution >> is not complete, so that it will not be removed from the list of objects >> (all_objects). > Does execute() do anything else besides call do_something(), and does > your while-loop do anything else before sleeping? If not, what you > really want is for QtConcurrent::map() to call > execute()/do_something() on every object in your container.
Well, it does a few things more. So I think I'll stick with QtConcurrent::run(). I'm coding now and I have a question. My do_something() function has the signature: int32_t SomeClass::do_something( unsigned char *data, const std::vector<SomeType>& obj_list); I do this: unsigned char *my_data; std::vector<SomeType> my_obj_list; ... QFuture<int32_t> f = QtConcurrent::run( &SomeClassObj, &SomeClass::do_something, my_data, my_obj_list); Now, my question is will this cause a copy of my_obj_list? Syam _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest