Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема обращения к com1 с разных мест программы / 5 сообщений из 5, страница 1 из 1
20.07.2005, 10:37
    #33175143
ТарасP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема обращения к com1 с разных мест программы
Проблема обращения к com1 с разных мест программы

Всем кто читает Большой ПРИВЕТ! =)
работаю с последовательным портом и вот незадача =(
возникла проблема обращения к com порту с разных мест проги а точнее (У меня есть два потока которые обращаются к этому порту и возникают моменты когда они вместе обращаются к нему и тут моя прога зависает.) Пробовал приостанавливать один из потоков пока один обращается к порту но это тоже приводит к зависанию.
Знаю что можно как то сделать так чтобы при обращеннии к порту прога или её часть ждала когдапорт освободится но как это сделать ума не приложу.

Подскажите как можно реализовать этот код. какой функцией пользоваться или пример какой если есть =)
Примного благодарен всем кто отозвался =)
...
Рейтинг: 0 / 0
20.07.2005, 10:50
    #33175183
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема обращения к com1 с разных мест программы
Привет.

Если в мультипоточном коде вы используете обращение
к функциям, которые не являются потоково-безопасными,
код следует немножко переделать.

Вам быстрее окажут помошь если вы приведете фрагмент исходника
потому как из вашего поста непонятно даже каким API вы пользуетесь.
...
Рейтинг: 0 / 0
20.07.2005, 11:06
    #33175227
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема обращения к com1 с разных мест программы
Если ОС - Windows и если прога работает с портом одна, только в разных потоках, то решение - критические разделы.

try
EnterCriticalSection
работаем с портом
finally
LeaveCriticalSection

так в каждом потоке
...
Рейтинг: 0 / 0
20.07.2005, 11:09
    #33175242
ТарасP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема обращения к com1 с разных мест программы
Вот код которым я пользуюсь для доступа к порту:
DWORD ComAccess::WriteData(LPCVOID pdata, DWORD len)
{
DWORD write;
BOOL bSuccess;

if ( len < 1 )
return(0);

bSuccess = WriteFile(m_hCom,pdata, len, &write, &m_ov);
if ( ! bSuccess )
{
ComAccess::ErrorToString("WriteData(): WriteFile() failed");
return(-1);
}

return write;
}
DWORD ComAccess::ReadData(LPVOID pdest, DWORD len)
{

BOOL bSuccess;
DWORD read = 0, mask = 0;

if ( len < 1 ) return(0);
bSuccess = ReadFile(m_hCom, pdest, len, &read,&m_ov);
return read;
}

BOOL ComAccess::Open(LPCSTR lpszPortNum)
{
DCB dcb; BOOL bSuccess;

m_hCom = CreateFile(lpszPortNum,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
NULL,
0);

if ( m_hCom == INVALID_HANDLE_VALUE )
{
// handle the error
ComAccess::ErrorToString("CreateFile() failed, invalid handle value");

return FALSE;
}


bSuccess = GetCommState(m_hCom, &dcb);

if ( ! bSuccess )
{
ComAccess::ErrorToString("GetCommState() failed");
ComAccess::Close();

return FALSE;
}


dcb.fDtrControl=DTR_CONTROL_DISABLE;
dcb.fBinary = TRUE;
dcb.BaudRate = 38400;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fOutX=FALSE;
dcb.fOutxCtsFlow=FALSE;
dcb.fOutxDsrFlow=FALSE;
dcb.fInX=FALSE;
dcb.fParity=0;


bSuccess = SetCommState(m_hCom, &dcb);

if ( ! bSuccess )
{
ComAccess::ErrorToString("SetCommState() failed");
ComAccess::Close();

return FALSE;
}
return TRUE;
}
...
Рейтинг: 0 / 0
20.07.2005, 20:36
    #33176886
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема обращения к com1 с разных мест программы
Лучше всего, сделать однопотоковый менеджер порта. А рабочие потоки будут посылать менеджеру запросы или получать от него сообщения.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема обращения к com1 с разных мест программы / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]