connectionManager.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. int ConnectionManager::sendJobListAsync(std::shared_ptr<JobList> &jobList) {
  12. workers.emplace_back(new Worker(&fpgas));
  13. workers.back()->assignJobList(jobList);
  14. workers.back()->startAsync();
  15. return 0;
  16. }
  17. int ConnectionManager::sendJobListSync(std::shared_ptr<JobList> &jobList) {
  18. workers.emplace_back(new Worker(&fpgas));
  19. workers.back()->assignJobList(jobList);
  20. workers.back()->startSync();
  21. return 0;
  22. }
  23. void ConnectionManager::start() {
  24. sendResult = std::async(std::launch::async, &ConnectionManager::sendThread, this);
  25. }
  26. void ConnectionManager::sendThread() {
  27. while(running) {
  28. Clock::time_point start = Clock::now();
  29. for(std::vector<std::unique_ptr<commFPGA>>::iterator it=fpgas.begin(); it!=fpgas.end(); it++) {
  30. it->get()->sendFromBuffer();
  31. }
  32. //printf("%8d %8d\n", fpgas[0].sendBufferWriteIndex, fpgas[0].sendBufferReadIndex);
  33. uint us = std::chrono::duration_cast<microseconds>(Clock::now() - start).count();
  34. if(us < 50)
  35. usleep(50 - us);
  36. }
  37. }