C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Контроль за записью данных в буфер.
Valery_52
Отправлено: 28.10.2005, 09:59


Ученик-кочегар

Группа: Участник
Сообщений: 25



Пишу на ВСВ6. Из приложения обращаюсь к динамической DLL, которая считывает данные с COM порта, записывая их в буфер. DLL использует потоки. Буфер (uinon)создаю в приложении , поинтер передаю как аргумент функции. Затем данные из буфера вывожу в Мемо.

PlcReadMem(PlcHandle,value , unBuf.pByte );

// Выведем из буфера в буферную строку
BufMem = "";
Memo1->Clear();
unsigned short int i;
for (i = 0; i < Value; i++) {
BufMem = BufMem+IntToHex(((int)unBuf.pWord[i]),4)+ " ";
}
// Теперь в мемо
Memo1->Lines->Add(BufMem);
При малом количестве данных (32 байта), все работает нормально. При больших объёмах, программа виснет. Полагаю что, DLL неуспев записать все данные в буфер unBuf.pByte, я начинаю читать их в буферную строку.
Подскажите пожалуста, каким образом отследить момент окончания записи в буфер?
Просматривая форум, я наткнулся на схожую тему. Там Георгий предлагал использовать функцию TMultiReadExclusiveWriteSynchronizer Synch;
Попробовал ее применить, но у меня ничего не получилось, при компиляции компилятор выдает ошибку. Если бы DLL была написана мною, можно былобы применить критические секции, и тогда бы выделить те участки кода, где ведется доступ к буферу, а так не знаю как и быть.
Valery_52
Отправлено: 31.10.2005, 09:09


Ученик-кочегар

Группа: Участник
Сообщений: 25



Вопрос снят, сам разобрался. После того как переместил определение
unBuf.pByte из Н файла в cpp, все стало нормально работать.

Вернуться в Вопросы программирования в C++Builder