-
Вот примерчик на C#:
class CAppCtx
private void DocRetStart()
private int DocRetCallback(CDocRet DocRet, int iStatus)
}
public delegate int TDocRetCallback(CDocRet DocRet, int iStatus);
public class CDocRet
public int StartWork()
private void ThreadRoutine()
}
}
Как устроить так, чтобы при вызове метода из CAppCtx.DocRetCallback() из CDocRet.ThreadRoutine() Thread.CurrentThread.ManagedThreadId=10, а не 11 как в данном случае? Т.е. как можно инициировать работу из другого потока?
-
Устроить это просто. Запускать метод в том же потоке и будут у них ID совпадать. Сейчас же в одном потоке создается экземпляр класса CDocRet, затем вызывается его метод, который создает новый поток и в этом потоке выполняется метод ThreadRoutine, в котором естественно будет другой ID. Самый простой совет - отказаться от создания потока, и будет задача выполнена. Посложнее - понять задачу, а что же надо сделать вообще.
-
Второй поток создается не только для того, чтобы вызывать в цикле метод из другого класса. Он выполняет свою параллельную задачу и просто при опрделенных событиях вызывает callback, после чего продолжает свою работу... Для упрощения понимания весь этот код не показан в приведенном примере.
-
Неважно что. Если он действительно выполняет метод ThreadRoutine, то внутри этого метода ID потока будет другим. А код упрощать не надо, когда показываете, лучше показать часть, но упрощение Ваши ошибки скрыть может.
-
Я поясню... Речь идет скорее о том, как лучше передать сообщение (вызвать событие) в другой поток. И при данной реализации естественно ID потока получается другой, т.к. вызывается в дочернем потоке. А хотелось бы, чтобы он вызывался в родительском... после сигнала из дочернего.
-
-
Читали мы уже такое - не совсем то... Но все равно, спасибо.
|