|
|
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
Приветствую Есть некий OleVariant (онлайн-касса), в который в отдельном Thread в обычном цикле пихаются данные. Но хочется иногда из основного потока в ту же самую кассу (OleVariant) подкинуть чеков. Кошерно ли из разных потоков писать в OLE объект? ошибки, последствия? Или нужно ставить на паузу Thread, формировать чек и затем возобновлять Thread? Или OLE проинициализированный в отдельном Thread вообще не возможно использовать из основного потока (как известно оконные компоненты нельзя создавать и уничтожать в разных потоках, но использовать же можно)? Поскольку кассы нет (да и если бы была - лишние чеки нежелательны), хотелось бы узнать заранее какова православная логика сего процесса??? ПС дельфи 7 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 14:28 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
Потоки могут общаться между собой разными путями. Например, обычными виндовыми сообщениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 14:45 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wadman, так зачем общаться, напрямую OLE использовать из разных потоков удастся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 16:26 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin, хорошо, делай напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 16:54 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wadman, ))вы скажите, это не ошибочный изначально путь то? просто я точно знаю, что некоторые компоненты доступа к БД позволяют из разных потоков юзать, просто пока используется в одном потоке, "висит" в другом, может и тут так же с OLE объектами. С другой стороны для чего то же нужно делать в новом потоке CoInitialize / CoUninitialize, хотя в основном это не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 16:59 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin просто пока используется в одном потоке, "висит" в другом, может и тут так же с OLE объектами. wolverin хотя в основном это не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 17:49 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin ))вы скажите, это не ошибочный изначально путь то? Ошибочный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 20:12 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Зависит от потоковой модели в котором работает COM объект. Если это Apartment (а для OLE обычно так и есть), то все вызовы методов объектов будут перенаправляться в один поток спасибо, т.е. смысла в общем случае нет обмениваться сообщениями между своими потоками и писать прям в OLE объект? а там он сам как нибудь разберется ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 06:10 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wadman, хорошо, если ошибочный, то правильно ли будет отправлять сообщение из основного потока в дополнительный, в котором в цикле пихающим данные в кассу делать проверку и при получении сообщения делать sleep на заданное время? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 06:13 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin, с кассой я работаю в основном потоке и жду пока она завершит свои делишки, т.к. все равно запись в БД и т.п. только после выдачи чека (много ошибок может произойти) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 08:27 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
cptngrb wolverin, с кассой я работаю в основном потоке и жду пока она завершит свои делишки, т.к. все равно запись в БД и т.п. только после выдачи чека (много ошибок может произойти) это хорошо в основном, но у меня несколько касс подключено к ПК, а мне еще надо банковские чеки в офд отправлять, вот они пока что на все кассы улетают одновременно, но это все равно доооооолго, приходят люди и надо чек распечатать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 08:53 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
вариант - купить еще касс не предлагать )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 08:54 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin, Понимание подразделений COM авторПравило 3: Никогда не передавайте между подразделениями прямые, немаршаленные указатели на интерфейсы. ... Поток A может безопасно разделять указатель на интерфейс с потоком B, если он отмаршалит этот указатель. Вот два основных способа которыми COM клиент может отмаршалить интерфейс в другое подразделение: ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 09:23 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin wadman, хорошо, если ошибочный, то правильно ли будет отправлять сообщение из основного потока в дополнительный, в котором в цикле пихающим данные в кассу делать проверку и при получении сообщения делать sleep на заданное время? С онлайн-кассой я бы работал из одного доп. потока, который бы периодически проверял очередь заданий и общался с онлайн-кассой. Задания добавлять в очередь из основного потока, либо из дополнительных потоков, которые можно создавать на период обслуживания клиента. После отправки задания в поток онлайн-кассы можно производить ожидание окончания обработки задания этим потоком. В основном потоке для ожидания я бы навешивал модальную форму и по таймеру проверял бы статус задания. В доп. потоках я бы ждал с помощью Event или Sleep. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 09:29 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
DmSer, помимо геморроя создания и поддержания очереди, которая нужна то часа 2-3 в течении дня, возникает опять вопрос - как экстренно прервать выполнение очереди и сделать более важное задание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 09:53 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), спасибо, читаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 09:54 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin как экстренно прервать выполнение очереди и сделать более важное задание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:15 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, да тупиковая эта идея с очередями имхо, чтобы вставить в начало - нужно будет опять тормозить очередь, чтобы определить это начало, при этом как написано в ссылке kealon(Ruslan), COM модель сама организует очередь из запросов к ней, мне нужно просто в "фоновом" потоке сделать маршалинг указателя, а когда чек нужно срочно выдать - демаршалинг в основном потоке и уже с полученным указателем работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:22 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin да тупиковая эта идея с очередями имхо, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:33 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Ошибаетесь. Это сильно проще чем проще? очевидно - очередь за которой не нужно следить, намного проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:36 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
единственно непонятно с очередью COM - чек это последовательный вызов около 5 методов, они и в очереди будут в том же порядке или перемешаются в потоках... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:44 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin единственно непонятно с очередью COM - чек это последовательный вызов около 5 методов, они и в очереди будут в том же порядке или перемешаются в потоках... Объединяйте все вызовы в одно задание, тогда не будет проблем с перемешиванием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:49 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
DmSer, не получится, COM сервер кассы определяет последовательность методов, со своей то очередью понятно что можно хоть как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:55 |
|
||
|
Thread vs OLE
|
|||
|---|---|---|---|
|
#18+
wolverin _Vasilisk_ Ошибаетесь. Это сильно проще чем проще? очевидно - очередь за которой не нужно следить, намного проще. Ваш COM-объект скорее всего рассчитан на последовательную работу с чеками. Сначала один чек. Закрыли. Второй чек. Закрыли и т.д. В этом случае не надейтесь, что подсистема СОМ выполнит работу за Вас! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2020, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40026694&tid=2037787]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 530ms |

| 0 / 0 |
