Commit 5ab2b5bc536c20956e74a295d5f8e5fb3947f2d9
1 parent
eed899b5
multi-thread br-enroll
Showing
6 changed files
with
20 additions
and
9 deletions
app/br-enroll/br-enroll.cpp
| @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) | @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) | ||
| 89 | Globals->quiet = true; | 89 | Globals->quiet = true; |
| 90 | Globals->enrollAll = true; | 90 | Globals->enrollAll = true; |
| 91 | algorithm = Transform::fromAlgorithm("FaceRecognition"); | 91 | algorithm = Transform::fromAlgorithm("FaceRecognition"); |
| 92 | - br_iterate_utemplates_file(stdin, enroll_utemplate, NULL); | 92 | + br_iterate_utemplates_file(stdin, enroll_utemplate, NULL, true); |
| 93 | Context::finalize(); | 93 | Context::finalize(); |
| 94 | return EXIT_SUCCESS; | 94 | return EXIT_SUCCESS; |
| 95 | } | 95 | } |
app/br-print/br-print.cpp
| @@ -45,6 +45,6 @@ int main(int argc, char *argv[]) | @@ -45,6 +45,6 @@ int main(int argc, char *argv[]) | ||
| 45 | for (int i=1; i<argc; i++) | 45 | for (int i=1; i<argc; i++) |
| 46 | if (!strcmp(argv[i], "-help")) { help(); exit(EXIT_SUCCESS); } | 46 | if (!strcmp(argv[i], "-help")) { help(); exit(EXIT_SUCCESS); } |
| 47 | 47 | ||
| 48 | - br_iterate_utemplates_file(stdin, print_utemplate, NULL); | 48 | + br_iterate_utemplates_file(stdin, print_utemplate, NULL, false); |
| 49 | return EXIT_SUCCESS; | 49 | return EXIT_SUCCESS; |
| 50 | } | 50 | } |
app/br-search/br-search.cpp
| @@ -198,7 +198,7 @@ int main(int argc, char *argv[]) | @@ -198,7 +198,7 @@ int main(int argc, char *argv[]) | ||
| 198 | galleries.append(MappedGallery(url)); | 198 | galleries.append(MappedGallery(url)); |
| 199 | 199 | ||
| 200 | Globals->quiet = true; | 200 | Globals->quiet = true; |
| 201 | - br_iterate_utemplates_file(stdin, search_utemplate, NULL); | 201 | + br_iterate_utemplates_file(stdin, search_utemplate, NULL, false); |
| 202 | 202 | ||
| 203 | Context::finalize(); | 203 | Context::finalize(); |
| 204 | return EXIT_SUCCESS; | 204 | return EXIT_SUCCESS; |
app/br-select/br-select.cpp
| @@ -49,6 +49,6 @@ int main(int argc, char *argv[]) | @@ -49,6 +49,6 @@ int main(int argc, char *argv[]) | ||
| 49 | else if (!strcmp(argv[i], "-algorithmID")) algorithmID = new int(atoi(argv[++i])); | 49 | else if (!strcmp(argv[i], "-algorithmID")) algorithmID = new int(atoi(argv[++i])); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | - br_iterate_utemplates_file(stdin, select_utemplate, NULL); | 52 | + br_iterate_utemplates_file(stdin, select_utemplate, NULL, false); |
| 53 | return EXIT_SUCCESS; | 53 | return EXIT_SUCCESS; |
| 54 | } | 54 | } |
openbr/universal_template.cpp
| 1 | #include <QFile> | 1 | #include <QFile> |
| 2 | +#include <QFutureSynchronizer> | ||
| 2 | #include <QMutex> | 3 | #include <QMutex> |
| 3 | #include <QMutexLocker> | 4 | #include <QMutexLocker> |
| 5 | +#include <QtConcurrent> | ||
| 4 | #include <cstdlib> | 6 | #include <cstdlib> |
| 5 | #include <cstring> | 7 | #include <cstring> |
| 6 | 8 | ||
| @@ -47,8 +49,15 @@ void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_ | @@ -47,8 +49,15 @@ void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_ | ||
| 47 | } | 49 | } |
| 48 | } | 50 | } |
| 49 | 51 | ||
| 50 | -void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context) | 52 | +static void callAndFree(br_utemplate_callback callback, br_utemplate t, br_callback_context context) |
| 51 | { | 53 | { |
| 54 | + callback(t, context); | ||
| 55 | + free(t); | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context, bool parallel) | ||
| 59 | +{ | ||
| 60 | + QFutureSynchronizer<void> futures; | ||
| 52 | while (!feof(file)) { | 61 | while (!feof(file)) { |
| 53 | br_utemplate t = (br_utemplate) malloc(sizeof(br_universal_template)); | 62 | br_utemplate t = (br_utemplate) malloc(sizeof(br_universal_template)); |
| 54 | 63 | ||
| @@ -56,9 +65,11 @@ void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_c | @@ -56,9 +65,11 @@ void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_c | ||
| 56 | t = (br_utemplate) realloc(t, sizeof(br_universal_template) + t->size); | 65 | t = (br_utemplate) realloc(t, sizeof(br_universal_template) + t->size); |
| 57 | if (fread(t+1, 1, t->size, file) != t->size) | 66 | if (fread(t+1, 1, t->size, file) != t->size) |
| 58 | qFatal("Unexepected EOF when reading universal template data."); | 67 | qFatal("Unexepected EOF when reading universal template data."); |
| 59 | - callback(t, context); | 68 | + if (parallel) futures.addFuture(QtConcurrent::run(callAndFree, callback, t, context)); |
| 69 | + else callAndFree(callback, t, context); | ||
| 70 | + } else { | ||
| 71 | + free(t); | ||
| 60 | } | 72 | } |
| 61 | - | ||
| 62 | - free(t); | ||
| 63 | } | 73 | } |
| 74 | + futures.waitForFinished(); | ||
| 64 | } | 75 | } |
openbr/universal_template.h
| @@ -81,7 +81,7 @@ BR_EXPORT void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplat | @@ -81,7 +81,7 @@ BR_EXPORT void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplat | ||
| 81 | * \brief Iterate over br_universal_template in a file. | 81 | * \brief Iterate over br_universal_template in a file. |
| 82 | * \see br_iterate_utemplates | 82 | * \see br_iterate_utemplates |
| 83 | */ | 83 | */ |
| 84 | -BR_EXPORT void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context); | 84 | +BR_EXPORT void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context, bool parallel); |
| 85 | 85 | ||
| 86 | #ifdef __cplusplus | 86 | #ifdef __cplusplus |
| 87 | } | 87 | } |