connectionManager.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "connectionManager.hpp"
  2. ConnectionManager::ConnectionManager() {
  3. }
  4. ConnectionManager::~ConnectionManager() {
  5. running = false;
  6. }
  7. void ConnectionManager::addFPGA(const char* ip, const uint port, bool bindSelf) {
  8. fpgas.emplace_back(new commFPGA(ip, port));
  9. fpgas.back()->start();
  10. }
  11. Worker* ConnectionManager::createWorker(Module mod, size_t numberOfJobs) {
  12. Worker *w = new Worker(&fpgas, mod, numberOfJobs);
  13. workers.emplace_back(w);
  14. return w;
  15. }
  16. void ConnectionManager::removeFinishedWorkers() {
  17. workers.erase(
  18. std::remove_if(
  19. workers.begin(),
  20. workers.end(),
  21. [&] (std::unique_ptr<Worker> const& p) {
  22. return !p.get()->isRunning();
  23. }),
  24. workers.end()
  25. );
  26. }
  27. void ConnectionManager::start() {
  28. running = true;
  29. sendResult = std::async(std::launch::async, &ConnectionManager::sendThread, this);
  30. }
  31. void ConnectionManager::sendThread() {
  32. pthread_setname_np(pthread_self(), "mlfpga send");
  33. std::chrono::steady_clock::time_point start;
  34. while(running) {
  35. start = std::chrono::steady_clock::now();
  36. for(std::vector<std::unique_ptr<commFPGA>>::iterator it=fpgas.begin(); it!=fpgas.end(); it++) {
  37. auto fpga = it->get();
  38. fpga->sendFromBuffer();
  39. }
  40. auto elapsed =std::chrono::steady_clock::now() - start;
  41. if(elapsed < sendDelay)
  42. std::this_thread::sleep_for(sendDelay - elapsed);
  43. }
  44. }