+ //using the main process as a worker saves time and memory
+ //do my part - do last piece because windows is looking for eof
+ num = driver(lines[processors-1], (alignFileName + toString(processors-1) + ".temp"), (reportFileName + toString(processors-1) + ".temp"), (accnosFName + toString(processors-1) + ".temp"), filename);
+
+ //Wait until all threads have terminated.
+ WaitForMultipleObjects(processors-1, hThreadArray, TRUE, INFINITE);
+
+ //Close all thread handles and free memory allocations.
+ for(int i=0; i < pDataArray.size(); i++){
+ num += pDataArray[i]->count;
+ CloseHandle(hThreadArray[i]);
+ delete pDataArray[i];
+ }
+
+ vector<string> nonBlankAccnosFiles;
+ if (!(m->isBlank(accnosFName))) { nonBlankAccnosFiles.push_back(accnosFName); }
+ else { m->mothurRemove(accnosFName); } //remove so other files can be renamed to it
+
+ for (int i = 1; i < processors; i++) {
+ m->appendFiles((alignFileName + toString(i) + ".temp"), alignFileName);
+ m->mothurRemove((alignFileName + toString(i) + ".temp"));
+
+ appendReportFiles((reportFileName + toString(i) + ".temp"), reportFileName);
+ m->mothurRemove((reportFileName + toString(i) + ".temp"));
+
+ if (!(m->isBlank(accnosFName + toString(i) + ".temp"))) {
+ nonBlankAccnosFiles.push_back(accnosFName + toString(i) + ".temp");
+ }else { m->mothurRemove((accnosFName + toString(i) + ".temp")); }
+ }
+
+ //append accnos files
+ if (nonBlankAccnosFiles.size() != 0) {
+ rename(nonBlankAccnosFiles[0].c_str(), accnosFName.c_str());
+
+ for (int h=1; h < nonBlankAccnosFiles.size(); h++) {
+ m->appendFiles(nonBlankAccnosFiles[h], accnosFName);
+ m->mothurRemove(nonBlankAccnosFiles[h]);
+ }
+ }else { //recreate the accnosfile if needed
+ ofstream out;
+ m->openOutputFile(accnosFName, out);
+ out.close();
+ }
+#endif
+
+ return num;