(Любой Там)
Я работаю над системой слежения за автотранспортными средствами: -
У меня количество автобусов говорят
b1t1(start at 7 am and stop at 7 pm)
bt2 (start at 8 am and stop at 8 pm) and bt3 (start at 9 am and stop at 9 pm)
,where t is start time of a bus
теперь у меня есть такие автобусы в списке.
Теперь для каждой шины в списке я выбираю один объект busobject и передаю его в метод MyMethod (bus bt); я хочу передать b1, b2, b3 в MyMethod (bus bt) и для каждой шины сказать b1-- начать собственную обработку MyMethod (bus bt)
а затем для b2 - запустить собственную обработку MyMethod (шина bt)
а затем для b3 ---- начать собственную обработку MyMethod (шина bt)
все b1, b2, b3 должны начинать свою собственную параллельную обработку (должна быть поточно-ориентированной - если это подходит для безопасного использования потока слов, я не знаю) ....
--- Я пытался использовать поток, но поток не получает доступ к методу параллельно ...
больше объяснений
у меня есть только один метод, и я буду передавать объект bus в цикле MyMethod (bus bt) один за другим ... но я хочу, чтобы поток t1 / t2 ... tn должен был обращаться к этому методу параллельно ... потому что, когда поток для b1 работает одновременно, поток для b2 должен работать.
enter c public bool SchedulerEntryPointFunction()
{
Console.WriteLine("Scheduler is initiated !\n\n");
bool bSuccess = false;
Console.WriteLine("Got ActiveBuses and coresponding Paths!\n\n");
List<ActiveBusAndItsPathInfo> ActiveBusAndItsPathInfoList = BusinessLayer.GetActiveBusAndItsPathInfoList();
if (ActiveBusAndItsPathInfoList != null)
{
Thread[] threads = new Thread[ActiveBusAndItsPathInfoList.Count];
while (true)
{
foreach (ActiveBusAndItsPathInfo ActiveBusAndItsPathInfoObj in ActiveBusAndItsPathInfoList)
{
//Get curent time
//compare for time difference less than equal to 5 mins
if (ActiveBusAndItsPathInfoObj.isSMSThreadActive == false)
{
// Console.WriteLine("SMS Thread about to initiate!\n\n");
DateTime CurrentTime = System.DateTime.Now;
// TimeSpan CurrentTimespan = (TimeSpan)CurrentTime;
DateTime Bustime = Convert.ToDateTime(ActiveBusAndItsPathInfoObj.busObj.Timing);
//TimeSpan BustimeTimes = Bustime.TimeOfDay;
TimeSpan tsa = Bustime - CurrentTime;
// if(tsa.TotalMinutes > 0 && tsa.TotalMinutes < 5)
{
ActiveBusAndItsPathInfoObj.isSMSThreadActive = true;
***ThreadStart starter = delegate { SMSThreadEntryPointFunction(ActiveBusAndItsPathInfoObj); };
Thread t = new Thread(starter);
**// t.Start();
int indexOfCurrentActiveBusAndItsPathInfoObj = ActiveBusAndItsPathInfoList.IndexOf(ActiveBusAndItsPathInfoObj);
threads[indexOfCurrentActiveBusAndItsPathInfoObj] = new Thread(starter);
threads[indexOfCurrentActiveBusAndItsPathInfoObj].Start();
threads[indexOfCurrentActiveBusAndItsPathInfoObj].Join();***
}
}
}**
}
}
return bSuccess;
}
Ода здесь
Новый код: -
Все еще выдает проблему с синхронизацией ...
foreach (ActiveBusAndItsPathInfo ActiveBusAndItsPathInfoObj in ActiveBusAndItsPathInfoList)
{
//Get curent time
//compare for time difference less than equal to 5 mins
if (ActiveBusAndItsPathInfoObj.isSMSThreadActive == false)
{
DateTime CurrentTime = System.DateTime.Now;
DateTime Bustime = Convert.ToDateTime(ActiveBusAndItsPathInfoObj.busObj.Timing);
TimeSpan tsa = Bustime - CurrentTime;
if(tsa.TotalMinutes > 0 && tsa.TotalMinutes < 5)
{
ActiveBusAndItsPathInfoObj.isSMSThreadActive = true;
ThreadPool.QueueUserWorkItem(state => SMSThreadEntryPointFunction(ActiveBusAndItsPathInfoObj)
}
}
}
}
return bSuccess;
}
нужно ли заблокировать мой метод ... SMSThreadEntryPointFunction (ActiveBusAndItsPathInfoObj)
В настоящее время я пытаюсь
ThreadPool.QueueUserWorkItem(new WaitCallback(SMSThreadEntryPointFunction), (object)ActiveBusAndItsPathInfoObj);
но выдает ошибку: - "No overload for SMSThreadEntryPointFunction matches delegate system.thread.WaitCallback"
(Любой там)