|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Вот если например у меня Form1, созданная Код: vbnet 1. 2.
и я создаю поток Код: vbnet 1. 2.
то я не могу напрямую из MyThreadFunction что-то сделать с элементами этой формы, надо извращаться Код: vbnet 1.
(обсуждали) Ой как доставляет. === А вот если у меня к примеру из основного потока создается Код: vbnet 1. 2. 3.
то я очень даже могу из MyThreadFunction успешно ковырять БД: Код: vbnet 1. 2.
Радует. === И от чего это зависит? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 06:54 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Зависит о любимого тобою winapi В случаее окон - работать можно только из создавшего потока С COM - смотри документацию на каждый конкретно в части касающейся многопоточности ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 07:37 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Изопропил, понятно. Плохо понимаю какую там докуменацию по adodb я должен читать, и надо ли мне оно. Но в любом случае метод тыка мне в помощь. Что поток с БД работает уже неплохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 07:51 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77, потоки же работают в 1 адресном пространстве, по этому 2 потока могут работать с 1 объектом без проблем, но существуют подводные айсберги, нужна синхронизация работы потоков, чтоб не получилось, что в 1 момент времени у тебя 2 потока пытаются сделать, что то противоречивое друг другу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 08:11 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Roman Mejtes, >нужна синхронизация работы потоков, ну тот поток который у меня mailslot ловит закрывается аккуратно, обсуждали как-то м.б. захочу еще добавить пару-тройку, но надо смотреть по ходу вполне вероятно ограничусь таймерами (c mailslot поток по крайней мере оправдан, ловит сообщения от быстро меняющегося процесса что влияет на отображение реального состояния дел, а например отправить мыло - задержка в 1-2 сек не принципиальна, пока там таймер сообразит что это надо сделать). >чтоб не получилось, что в 1 момент времени у тебя 2 потока пытаются сделать, что то противоречивое друг другу в смысле типа два потока одну и ту же запись в БД пытаются изменить? вроде как исключено логикой программы Но если что не так, то на динамических тестах быстро вылетит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 08:39 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77и надо ли мне оно. как наступишь на грабли - приходи ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2015, 08:46 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77>чтоб не получилось, что в 1 момент времени у тебя 2 потока пытаются сделать, что то противоречивое друг другу в смысле типа два потока одну и ту же запись в БД пытаются изменить? вроде как исключено логикой программы Но если что не так, то на динамических тестах быстро вылетит. не два потока одновременно использую один коннекшн! попробуй сделать ради интереса, посмотри что выйдет ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 12:47 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
pationне два потока одновременно использую один коннекшн! попробуй сделать ради интереса, посмотри что выйдет в смысле должно вылететь или не знаешь и интересно что выйдет? Ну смотри. Пока есть вот что. Отдельный поток который ловит mailslot пишет в базу статистику входящих тел. вызовов (по мере необходимости, без долбежа). Грубо вызов закончился, пишется в отдельную таблицу команду отправить мыло. Таймер (на основной Form1 созданной из main()) смотрит не надо ли отправить мыло - раз в секунду запрашивает базу. Мыльную процедуру пока не добавил(как раз ей сейчас занимаюсь, не проблема), ну просто msgbox выводится, суть что он ее долбит из другого потока (через тот же connection). На отдельных тестах ничего не вылетает (по 50 одновременных вызовов протестировать естественно смогу лишь когда допишу всю логику). Ну попробовал интервал mail-таймера для теста уменьшить до 1мс (вместо 1000). Ничего не вылетело, работа mailslot не нарушилась. Подозреваю что и не вылетит. Скорее всего какая-то очередь существует. Ну, в крайнем случае сделаю я этот Invoke и будет он ее долбить из одного потока (как в VB6 успешно работало, там mailslot сидел на таймере, а не на бесконечном ожидании в своем потоке). Кстати вопрос, возможно глупый но тем не менее. Таймер в .Net -это отдельный поток? Я обратил внимание что он работает не совсем так как в VB6. Попробую объяснить. Напр. я таймером вывожу MsgBox. VB6 больше одного не выведет. А .Net будет генерить по MsgBox с каждым тиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 13:39 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77Таймер в .Net -это отдельный поток? Какой именно таймер? их несколько разновидностей ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 16:40 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Изопропил, тот который я в конструкторе на форму кидаю. Глянь еще соседнюю тему, а то я себя похоже заранее накрутил. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 17:36 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77тот который я в конструкторе на форму кидаю. это WM_TIMER со всеми вытекающими обзор здесь https://msdn.microsoft.com/ru-ru/library/zdzx8wx8(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 19:50 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Изопропилэто WM_TIMER со всеми вытекающими Ну понятно. Значит в окно стучится. Это объясняет "генерацию множественных MsgBox-ов". Если сделать Thread.Sleep(10000) в процедуре таймера, то все стопорится (в том числе и работа "других таймеров"), в принципе итак было ясно что поток тот же. В таком случае в процедуре таймера ( 17509232 ) .Send(message) делать нельзя только .SendAsync(message, m_emailToken) Ну, по идее в m_emailToken как раз можно запихнуть информацию об attach, которые удалить из CallBack-функции. Чет я сомневаюсь что attach можно удалять сразу после .SendAsync CDO.Message в этом плане конечно удобнее, оно не стопорит поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 20:26 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77Чет я сомневаюсь что attach можно удалять сразу после .SendAsync угу, ответ - в соседнем топике ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 20:31 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
pationне два потока одновременно использую один коннекшн! попробуй сделать ради интереса, посмотри что выйдет Фигня похоже вышла. На "единичных" тестах все работало, хотя пару раз возникали сомнения. Счас вроде дописал этот модуль, на 5 одновременных вызовах начинает твориться непойми чего, подозреваю из-за этого. Ничего не вылетает, благо Try...Catch на любые запросы к БД напичкано от души, но путаница полная. При этом приложение походу еще и не всегда закрывается как положено. Предполагаю, подвисание обработки очередного message из-за connection и как следствие не выход на цикл где ReadFile+MAILSLOT_WAIT_FOREVER должен вернуть ошибку и закрыть поток. По ощущениям, проблемы возникакают тогда когда оба потока работают с одной и той же таблицей, пример с тестом с миллисекундным таймером, который занимается отправкой мыла видимо был неудачен. Буду разбираться, видимо передавать обработку mailslot-сообщений в основной поток. Если это не поможет, убирать нафиг этот поток и сажать mailslot на таймер как и было в VB6. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2015, 20:56 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Invoke в основной поток (чтоб только оттуда пользовать Connection) конечно помог. Но в итоге таки пересадил mailslot на таймер формы в основной поток (как и было). Причина: задержка в закрытии приложения по команде извне, потоку надо время чтоб закрыться, пусть малое но при моем алгоритме перезапуска "системы" достаточное для того чтобы приложение не перезапустилось (т.е. "система" при запуске видит закрывающийся "хвост" еще не закрывшегося приложения и не перезапускает его. Дефекты алгоритма конечно, но проще оставить с таймером как было, ну его нафик этот поток в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2015, 13:55 |
|
Доступ к "объекту" из другого потока, ньюансы
|
|||
---|---|---|---|
#18+
Дмитрий77Изопропил, понятно. Плохо понимаю какую там докуменацию по adodb я должен читать, и надо ли мне оно. Не надо забивать голову ненужными вещами ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2015, 19:57 |
|
|
start [/forum/topic.php?fid=20&msg=38939805&tid=1401649]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 363ms |
total: | 499ms |
0 / 0 |