У меня есть серверное клиентское приложение по протоколу tcp/ip, где и сервер, и клиент работают с разной скоростью. Я использую Carmaker в качестве сервера и некоторый модуль C в качестве клиента для получения данных от него. Мой клиент запускается каждые 20 мс [в соответствии с проектом], а Carmaker запускает свою внутреннюю функцию каждую 1 мс, и, если нам нужно, доступен случай паузы.
Мне нужно, чтобы сервер и клиент были синхронизированы, где, когда клиент обрабатывает шаг 20 мс, Carmaker завершит его 20 шагами по 1 мс. т. е. я хочу приостановить работу автопроизводителя, пока клиент не завершит процесс.
Я отправляю часы клиента на сервер и реализую следующий код внутри сервера.
case SCState_Simulate:
if ((rv=App_TestRun_Calc(DeltaT)) != 0)
SimCore_State_Set (SCState_End);
//if((SimCore.CycleNo - start_cycle_)>runto_cycle_){
//Log("IfLessthanSimulate: %d\n", SimCore.CycleNo);
//}
//Log("StartSimulate: %d\n", SimCore.CycleNo);
Log("Simulate Carmakertime: %ld Clienttime: %ld in milliseconds\n", carmaker_time_ms,client_time_ms );
SimCore_State_Set(carmaker_time_ms<=client_time_ms ? SCState_Simulate : SCState_Pause);
break;
case SCState_Pause:
// wait for continue
//Log("Pause: %d\n", SimCore.CycleNo);
Log("Pause Carmakertime: %ld Clienttime: %ld in milliseconds\n", carmaker_time_ms,client_time_ms );
SimCore_State_Set(carmaker_time_ms<=client_time_ms ? SCState_Simulate : SCState_Pause);
break;
А на стороне клиента я получаю время сервера и жду carmaker_time_ms<client_time_ms, а затем отправляю клиентское время на сервер производителя автомобилей.
Не могли бы вы помочь в изменении и сказать мне, как сделать сервер и клиент синхронными.