|
|
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
Привет всем. Я нуждаюсь помочь профессионала! Задача: Общаться надо с неким контролером. Вот пример: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Как дождаться пока DeviceCallback не закончилась свою выполнению? Я думаю здесь в помочь приходить ITask, но не понимаю как использовать его в моем случае! Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 14:48 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
Alimkulov, подозреваю, что девайскэлбэк вызывается в контексте драйвера? Если так, то достаточно запомнить ответ и отправить себе (своему окну или потоку) сообщение с его содержимым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 14:57 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
wadman, Спасибо за ответ! Да, DeviceCallback вызывается в контексте драйвера, и вызывающий процесс в DLL. Причем вызывающий процесс многопоточный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:00 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
Все примеры по ITask только Sleep используют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:02 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
AlimkulovЯ думаю здесь в помочь приходить ITask, но не понимаю как использовать его в моем случае!Я тоже не знаю. Я бы так что-то вроде такого: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:05 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
YuRock, Спасибо за ответ! Event - что за объект это? DeviceResult - что будет если много потоков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:09 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
Я могу поместить DeviceCallback как метод некого класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:11 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
YuRock, а если вызов функции GetDeviceValue из UI потока - то юзер будет любоваться на зависшее окно? Уж лучше как wadman советовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:12 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
white_nigger, GetDeviceValue один из функции API в DLL. Пользователи этого API сами заботиться насчет зависание! Вот они смогут применять технику wadman'а наверное! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:18 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
white_niggerYuRock, а если вызов функции GetDeviceValue из UI потока - то юзер будет любоваться на зависшее окно? Уж лучше как wadman советовалЗадача ТС была - именно дождаться ответа, а не перепостить его из коллбэка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:45 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
AlimkulovЯ могу поместить DeviceCallback как метод некого класса?Нет. Скажи спасибо разработчикам dll, которые не предусмотрели доп. параметр в SendRequest и коллбэке типа UserParam: Pointer, в который можно было бы передать указатель на объект класса. Возможно, хватило бы и DeviceID, но в коллбэке и его нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:48 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
AlimkulovEvent - что за объект это?Например, TSimpleEvent AlimkulovDeviceResult - что будет если много потоков?Будет плохо. Тогда ты вообще не разберешь, откуда что пришло. Ну и, понятно, синхронизацию придется делать. В общем, лучше тогда переделать всю логику на вариант wadman'а, но тогда об ожидании и речи нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 15:52 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
YuRockЗадача ТС была - именно дождаться ответа, а не перепостить его из коллбэка.Не уверен. Он спросил как смог не обладая должными знаниями. Единственное зачем может понадобиться это ожидание - это получение результата в DeviceCallback (о чем ТС и пишет). И нет никакой необходимосьти фризить при этом каллера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 17:28 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
AlimkulovЯ могу поместить DeviceCallback как метод некого класса? Только если классовый статический, чисто для логической организации. Никаких преимуществ от того, что метод входит в класс, не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2019, 18:59 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
white_niggerЕдинственное зачем может понадобиться это ожидание - это получение результата в DeviceCallback (о чем ТС и пишет). И нет никакой необходимосьти фризить при этом каллераМало ли. Может, нужно синхронно, в ходе выполнения какой-то процедуры, сразу получить результат. Post куда-то в таком случае не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 01:12 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
YuRockwhite_niggerЕдинственное зачем может понадобиться это ожидание - это получение результата в DeviceCallback (о чем ТС и пишет). И нет никакой необходимосьти фризить при этом каллераМало ли. Может, нужно синхронно, в ходе выполнения какой-то процедуры, сразу получить результат. Post куда-то в таком случае не поможет. Морозить интерфейс это от неумения и/или кривой архитектуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 07:42 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
wadmanYuRockпропущено... Мало ли. Может, нужно синхронно, в ходе выполнения какой-то процедуры, сразу получить результат. Post куда-то в таком случае не поможет. Морозить интерфейс это от неумения и/или кривой архитектуры.Ну да. Вот, кривая архитектура, к примеру. А вообще... Если я вызываю функцию и хочу получить её результат. Здесь и сейчас, а не куда-то. То это не такая уж и кривая архитектура. Смотря с какой стороны посмотреть. Например, речь вообще об интерфейсе не идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 11:15 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
YuRockТо это не такая уж и кривая архитектура. Например, вынести это в поток и ждать сколько хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 11:20 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
+1 wadman :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 12:01 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
wadmanYuRockТо это не такая уж и кривая архитектура. Например, вынести это в поток и ждать сколько хочешь.Так оно ж и так в потоке, потому и ждать приходится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 13:43 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
YuRockТак оно ж и так в потоке вгде? по первому топику ТС этого не скажешь. Как я понял, он хочет сделать ожидание внутри функции GetDeviceValue вместо того, чтобы вызывать ее внутри потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 14:50 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
ДокYuRockТак оно ж и так в потоке вгде? по первому топику ТС этого не скажешь. Как я понял, он хочет сделать ожидание внутри функции GetDeviceValue вместо того, чтобы вызывать ее внутри потока. Я из этого: AlimkulovDeviceCallback вызывается в контексте драйвера, и вызывающий процесс в DLL. Причем вызывающий процесс многопоточный . сделал такой вывод. (хотя это и под вопросом, конечно). Но, главное, конечно, в том, что если бы Controller.SendRequest не создавал поток внутри себя - то и ждать не надо было бы ничего. Была бы гарантия, что после выполнения SendRequest коллбэк уже либо вызвался, либо уже никогда не будет вызван. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2019, 14:58 |
|
||
|
Использование ITask как await
|
|||
|---|---|---|---|
|
#18+
Спасибо всем! Я тут обсуждал с разработчиками драйвера контролера насчет того, чтобы сделать возможность отправить и получить контекст типа UINT32. Но, к сожалению, они почему то не смогут сделать это! Придется сделать однопоточный API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2019, 09:29 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=82&tid=2039811]: |
0ms |
get settings: |
8ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 402ms |

| 0 / 0 |
