Начальник потребовал, чтобы он работал и под виндой.
С компиляторами разобрался. Но возникли некоторые проблемы. Потребовалось управлять скоростью выдачи пакетов.
Стал использовать функции clock_gettime и nanosleep. Под Linux всё работает как и ожидается. Но при попытке запустить виндовую версию выскакивает сообщение
Shell
002b:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\run\\shm\\imit1_w64.exe") not found
002b:err:module:LdrInitializeThunk Importing dlls for L"Z:\\run\\shm\\imit1_w64.exe" failed, status c0000135
Решил проверить быстродействие (и разрешение) clock_gettime
Написал простую программу, которая выдаёт его миллион раз и вычисляет разницу между текущим и предыдущим временем. В зависимости от параметра clockid. Сначала не захотела собираться. Но собралась после добавки -lpthread
А вот запускаться не хочет:
Shell
mik13@MiK13:/run/shm$ wine ts.exe
002c:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\run\\shm\\ts.exe") not found
002c:err:module:LdrInitializeThunk Importing dlls for L"Z:\\run\\shm\\ts.exe" failed, status c0000135
mik13@MiK13:/run/shm$ ls -l `locate libwinpthread-1.dll`
-rwxr-xr-x 1 root root 303749 сен 18 2020 /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
-rwxr-xr-x 1 root root 366907 сен 18 2020 /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
Spoiler
Особенности запуска в винде
Сначала начальник потребовал, чтобы на экран выводилась информация о том, что передаётся по сети.
Решил использовать Esc-поледовательности, чтобы выводить эту информацию. Под линуксом всё было нормально.
В винде (10) управление курсором работать не захотело -- всё выводится в одну строчку.
Хотя если вывод направить в файл: imit.exe >file, то type file выводится как надо.
Так же нормально (почти) выводится в случае imit.exe | cmd. "почти" -- cmd постоянно выводит в stdout, что "e не является командой" -- немного портит картинку.
Проблема решилась после установки git-bash. Из под него программа запускается и нормально работает. Почти. Проблема с функцией nanosleep.
Значение задержки я указываю через параметр (в мкс) и умножаю его на 1000.
Значение 999 действует как нулевое. Значение 1000 вызывает задержку примерно в 15 мс и так до значения 15999.
Значения 16000 и 31999 (и между ними) дают задержку в два раза больше.
Может быть под виндой надо использовать какую-то другую функцию? (usleep работает аналогично)
Ещё удивило, что программа ts.exe не захотела работать под виндой -- выскакивает сообщение, что нет библиотеки libwinpthread-1.dll.
Решил запустить под гит-башем -- запустилась. То есть он каким-то образом даёт доступ к этой библиотеке.
Но clock_gettime воспринимает не все значения параметра clockid.
Если в линуксе он принимает значения 0 ... 9 и 11, то под виндой только 0 ,,, 4. Да и разрешение, похоже, минимум 100 нс.
Сначала начальник потребовал, чтобы на экран выводилась информация о том, что передаётся по сети.
Решил использовать Esc-поледовательности, чтобы выводить эту информацию. Под линуксом всё было нормально.
В винде (10) управление курсором работать не захотело -- всё выводится в одну строчку.
Хотя если вывод направить в файл: imit.exe >file, то type file выводится как надо.
Так же нормально (почти) выводится в случае imit.exe | cmd. "почти" -- cmd постоянно выводит в stdout, что "e не является командой" -- немного портит картинку.
Проблема решилась после установки git-bash. Из под него программа запускается и нормально работает. Почти. Проблема с функцией nanosleep.
Значение задержки я указываю через параметр (в мкс) и умножаю его на 1000.
Значение 999 действует как нулевое. Значение 1000 вызывает задержку примерно в 15 мс и так до значения 15999.
Значения 16000 и 31999 (и между ними) дают задержку в два раза больше.
Может быть под виндой надо использовать какую-то другую функцию? (usleep работает аналогично)
Ещё удивило, что программа ts.exe не захотела работать под виндой -- выскакивает сообщение, что нет библиотеки libwinpthread-1.dll.
Решил запустить под гит-башем -- запустилась. То есть он каким-то образом даёт доступ к этой библиотеке.
Но clock_gettime воспринимает не все значения параметра clockid.
Если в линуксе он принимает значения 0 ... 9 и 11, то под виндой только 0 ,,, 4. Да и разрешение, похоже, минимум 100 нс.