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, все стало нормально работать. |
|
|