Здравствуйте Ed.ward, Вы писали:
EW>я ипользовал Mailslot для посылки сообщений на Messanger, риф быль только один, передавать разом оказалось возможным не более 400 байт, хотя в MSDN написано что нельзя более 128 байт (я так понимаю это максимальный размер SMB пакета)
У меня прога с оЧЧЕЕЕНь большой частотой пишет в слоты. Получается кусок типа такого:
где-то ранее:
int m_iMaxMailSlotSize = 400;
MyWrite( char* Name, char* pData, int iSizeData)
{
HANDLE m_hSlot = CreateFile( Name, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if(m_hSlot == INVALID_HANDLE_VALUE) return;
for( ; iSizeData > 0; iSizeData -= m_iMaxMailSlotSize)
{
int iSize = (iSizeData < m_iMaxMailSlotSize) ? iSizeData : m_iMaxMailSlotSize;
if(!WriteFile( m_hSlot, pData, iSize, &dwWriten, NULL))
break;
pData += m_iMaxMailSlotSize;
}
CloseHandle( m_hSlot);
}
main()
{
.....
....
while()
{
...
...
Имя слота выдаёт функция в которой ищется не используемый в данный момент слот.
MyWrite( Name, data, size);
}
}
В какой-то момент для записи выбирается слот в который мы только что писали,и при попытки его использовать
винды отчебучивают или наложение данных при приёме у сервера,или просто что-то начинают предпринимать такое серьёзное
что забивают весь проц. на 100%.