OrderSend открывает позицию и возвращает -1? - страница 4

 
что то типа
while(CurTime()<t+TRADE_TIMEOUT*TRADE_ITERATIONS && j<TRADE_ITERATIONS)
 
или так
for (j=0;j<10 && ticket==-1;j++)
{
ticket=SendOrder(...);
if (ticket==-1) слип;
}
 
или самое красивое

while (j<TRADE_ITERATIONS && ticket==-1)
if (CurTime>t+TRADE_TIMEOUT*j)
{
ticket=SendOrder(...);
j++;
}
 
или самое красивое

while (j<TRADE_ITERATIONS && ticket==-1)
if (CurTime>t+TRADE_TIMEOUT*j)
{
ticket=SendOrder(...);
j++;
}


Вы знаете, что делает вызов Sleep(1000)?
Так вот, в течение секунды он не делает ничего. То есть, буквально. Процессор выполняет другие задачи.

Ваш код молотит несколько машинных команд в коротком цикле, загружая процессор на 100% в течение секунды. Повезет, если CurTime способен переключать контекст, иначе другие эксперты просто остановятся.
 
Не могу с Вами согласиться. У меня открыто 9 терминалов, в каждом по 9 окон, в каждом окне по советнику, половина из них в бесконечном цикле со Слипами. Особых тормозов не ощущаю. Да, и по Диспетчеру задач видно, что процессор периодически подгружается, но чтобы томозить всех - нет.
 
Не могу с Вами согласиться. У меня открыто 9 терминалов, в каждом по 9 окон, в каждом окне по советнику, половина из них в бесконечном цикле со Слипами. Особых тормозов не ощущаю. Да, и по Диспетчеру задач видно, что процессор периодически подгружается, но чтобы томозить всех - нет.



Собственно, пойнт был, что слип не тратит процессорное время, в отличие от цикла ожидания, более подходящего для контроллера клавиатуры, чем для программы, обеспечивающей работу огромного количества ресурсов в реальном времени в виндах, которым до реалтайма, как паровозу до марс экспресс.

Для того, чтобы хорошо понимать, что такое многозадачность, многопоточность. кооперативные и преемптивные треды, разделение ресурсов, и правильно писать программы, люди тратят годы жизни.

Объяснять все это здесь я больше смысла не вижу, и на этом свою преподавательскую деятельность заканчиваю.

Весь оффтопик по поводу того, как красивее, пожалуйста, в тему "Программирование и его красоты", а еще лучше в более подходящий тематический форум.

Напоследок, запустите скрипт и посмотрите на диспетчер задач.
int start()
{
   while(true)  CurTime();
   return(0);
}