(Все там)
Я работаю над системой слежения за транспортными средствами: у меня есть n автобусов, скажем, 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
теперь у меня есть такие автобусы в списке.
теперь для каждой шины в списке я беру один объект автобуса и передаю методу MyMethod (bus bt); я хочу, я хочу передать b1, b2, b3 в MyMethod (шина bt) и и для каждой шины скажем b1--запустите собственную обработку MyMethod(bus bt)
и затем для b2 --запустите свою собственную обработку MyMethod(bus bt)
и затем для b3- --- запустить собственную обработку MyMethod(bus bt)
все b1 b2 b3 должны начать собственную обработку параллельно (должно быть потокобезопасным --- уместно ли использовать слово потокобезопасный, я не знаю) ....
--- Я пытался использовать поток, но поток не обращается к методу параллельно...
более подробное объяснение, у меня есть только один метод, и я буду передавать объект шины в цикле 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"
(Все там)
SMSThreadEntryPointFunction
? - person Timo Kosig   schedule 02.02.2010