Я помню, что был способ сделать это, что-то похожее на сигналы unix, но не так широко используется. Но не помню этот термин. Нет событий/мьютексов: поток просто прерывается в случайном месте, функция вызывается, и когда она возвращается, поток продолжается.Как вызвать функцию в контексте другого потока?
ответ
вы можете найти RtlRemoteCall
, но это недокументированная процедура. есть APC в Windows, семантически подобный сигналу Unix, однако APC требует, чтобы целевой поток находился в аварийном состоянии для доставки, не гарантируется, что это условие всегда выполняется.
Просто попробовал RtlRemoteCall. По-видимому, если поток находится в небезопасном ожидании (синхронный ReadFile), функция не вызывается. – basin
Windows имеет Asynchronous Procedure Calls, который может вызывать функцию в контексте конкретной нить. APC не просто прерывают поток в случайном месте (что было бы опасно - поток мог быть посреди записи в файл или получения блокировки или в режиме ядра). Вместо этого APC будет отправляться, когда вызывающий поток переходит в переменное ожидание, вызывая определенную функцию (см. Документацию APC).
Если причина того, что вам нужно вызвать код в определенной теме, потому что вы взаимодействуете с пользовательским интерфейсом, было бы прямо на send или post сообщения окна в оконной ручку, которую вы хотите обновить. Сообщения окна всегда обрабатываются в потоке, который создал окно.
+1, yup - PostMessage/SendMessage для GUI, иначе APC с предупреждающим ожиданием. –
- 1. Как вызвать функцию внутри потока?
- 2. Как вызвать mexCallMATLAB из другого потока
- 3. Как мне вызвать ImageList.Images.Clear() из другого потока?
- 4. Как вызвать метод управления из другого потока
- 5. Как вызвать функцию другого объекта в JavaScript?
- 6. Как вызвать функцию на выполняющегося потока Python
- 7. Как я могу вызвать метод getHandler() потока из другого потока?
- 8. Как вызвать метод интерфейса в этом контексте?
- 9. PHP как вызвать функцию из другого класса?
- 10. Как вызвать функцию из другого модуля
- 11. Как вызвать функцию класса из другого класса?
- 12. Как вызвать функцию из другого скрипта (AngularJS)
- 13. Как вызвать функцию из другого файла класса
- 14. как вызвать функцию javascript из другого javascript?
- 15. Как вызвать функцию из другого Specialpage
- 16. Как вызвать функцию метода из другого класса?
- 17. Как вызвать функцию из другого ViewController
- 18. Как вызвать функцию предупреждения с другого контроллера?
- 19. Как вызвать функцию самопроизводства из другого файла
- 20. Как вызвать функцию из другого блока Magento
- 21. Как вызвать функцию jquery из другого частичного?
- 22. Как вызвать функцию AngularJS для другого контроллера?
- 23. Как вызвать функцию из другого класса Laravel
- 24. как вызвать функцию одной директивы от другого
- 25. Как вызвать функцию во время работы другого
- 26. Как я могу вызвать функцию другого класса?
- 27. Как вызвать функцию из другого класса?
- 28. как вызвать функцию из другого класса фрагмента
- 29. Вызвать метод скрученного протокола из другого потока
- 30. Вызвать функцию из другого файла в Python
Вы уверены, что это была функция в контексте другого потока? Windows упрощает запуск кода в другом процессе, но в другом потоке это то, чего я никогда не помню. – JimR
Пожалуйста, не помещайте информацию о теге в свой заголовок. Система маркировки здесь очень хороша в классификации вещей и не нуждается в помощи. :-) Пожалуйста, см. [Если вопросы включают «теги» в их названиях?] (Http://meta.stackexchange.com/q/19190/172661). Благодарю. –