MRound
не является функцией VBA. Измените MRound(seconds_working, 1)
на WorksheetFunction.MRound(seconds_working, 1)
Вместо того, чтобы разветвиться существует два других подхода для обработки параллельных соединений. Или Вы используете потоки или подход опроса.
В подходе потока для каждого соединения новый поток создается, который обрабатывает ввод-вывод сокета. Поток работает в той же виртуальной памяти процесса создания и может получить доступ ко всем своим данным. Удостоверьтесь, что правильно использовали блокировки для синхронизации доступа для записи на данных.
Еще более эффективный подход должен использовать опрос через выбор (). В этом случае единственный процесс/поток обрабатывает все сокеты. Это работает под предположением, что большей частью работы будет ввод-вывод и что время тратит с ожиданием запросов ввода-вывода для окончания, потрачен, обработав другие сокеты.
Пойдите исследование далее в области тех двух опций и решите, какой подходит Вам лучше всего.
Посмотрите, например: http://www.perlfect.com/articles/select.shtml
Если у Вас есть так много данных, интересно, почему Вы просто не используете базу данных?
Эта архитектура является неподходящей для Cygwin. Разветвление в реальных системах Unix является дешевым, но в поддельных системах Unix как Cygwin это ужасно дорого, потому что все данные должны быть скопированы (реальные нельды используют копию на записи). Используя изменения потоков шаблон использования памяти (более высокое основное использование, но меньшее увеличение на поток), но разногласия - это, все еще будет неэффективен.
Я был бы совет Вы для использования опроса использования подхода единственного процесса и возможно неблокирования IO также.