Re[2]: Работа с удаленными MailSlot-ами
От: Alex Smirnov Россия  
Дата: 22.10.02 13:52
Оценка:
Здравствуйте 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%.
Alex
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.