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