Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 18:51   #1
Yahoo!
 
Регистрация: 17.04.2010
Сообщений: 3
По умолчанию Зависание при подключении к COM модему

Форумчане, прошу помогите...

Есть usb-модем опсосов HUAWEI "проецируется" на COM7
Так вот написал программу, которая соединяется с модемом и позволяет мне звонить или отправлять СМС с него, но вот проблема, программа зависает когда я подключаюсь к модему, ЕСЛИ я его НЕ "Опросил"(через диспетчер устройств) или НИ РАЗУ не выходил в интернет, ДО ТОГО как вставил модем в порт. Если это сделать то ОНА ПОЛНОСТЬЮ РАБОТАЕТ.

Привожу кусочек проблемной части программы
Код:
void OpenPort()
{
	if (hCom != INVALID_HANDLE_VALUE)
	{
		ClosePort();
		Sleep(300);
	}

	GetDlgItemTextA(hWnd, IDC_COMBO1, ModemPort, 6);

	char ComPort[10];
	lstrcpyA(ComPort, "\\.\\\\");
	lstrcatA(ComPort, ModemPort);

	hCom = CreateFileA(ComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
	
	if (hCom == INVALID_HANDLE_VALUE) SetDlgItemTextA(hWnd, IDC_EDIT5, "failed to open port");
	else  
	{
		SetDlgItemTextA(hWnd, IDC_EDIT5, "port successfully opened");
		
		hThread = CreateThread(0, 0, ReadThread, (LPVOID)hWnd, 0, 0);

		DCB dcb;
		memset(&dcb, 0, sizeof(dcb));
		dcb.DCBlength = sizeof(dcb);
		MessageBoxA(0, "Щас может зависнуть :(\nЧтобы этого не произошло:\
			\n Войдите хоть раз в интернет либо опросите модем ч/з диспетчер устройств.",
			"Bug", MB_OK | MB_ICONASTERISK );

		// При вызове GetCommState она и зависает...

		if(!GetCommState(hCom, &dcb)) SetDlgItemTextA(hWnd, IDC_EDIT5, "Error of get data about port");
		// Если закоментить GetCommState то прожка зависнет на SetCommState и т.д...
		dcb.BaudRate = CBR_57600; //460800;
		dcb.ByteSize = 8;
		dcb.Parity = NOPARITY;
		dcb.StopBits = ONESTOPBIT;

		if (SetCommState(hCom, &dcb)) SetDlgItemTextA(hWnd, IDC_EDIT5, "Configuring OK");
		else SetDlgItemTextA(hWnd, IDC_EDIT5, "Configuring Error");
	}
	return;
}
знаете как это можно исправить? Или мне искать мануалы на английском, которых в открытом доступе скорее всего не будет Если они есть то можно и на них ссылочку...
Yahoo! вне форума Ответить с цитированием
Старый 18.04.2010, 23:29   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Попробуй сразу после открытия сделать ему PurgeComm(hCom,0x000F)
f.hump вне форума Ответить с цитированием
Старый 19.04.2010, 09:06   #3
Yahoo!
 
Регистрация: 17.04.2010
Сообщений: 3
По умолчанию

Спасибо, я уже пробавал ее эквивалент
Код:
PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); //restart
и по твоему попробовал тож не помогло, копаю дальше...
Yahoo! вне форума Ответить с цитированием
Старый 22.04.2010, 01:45   #4
Yahoo!
 
Регистрация: 17.04.2010
Сообщений: 3
По умолчанию

Вопрос отпал сразу после полного анализа моего кода и удаления с него строчки создания потока на чтение.
(Да как я на нее раньше внимание не обратил только голову Вам зря заморочил, простите)
Тему можно прикрыть
Yahoo! вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы при подключении MySQL к Delphi Umen БД в Delphi 13 18.04.2011 18:06
При подключении интернета делать webbrowser1.Refresh; MaGiS Помощь студентам 1 18.03.2010 10:58
Проблема при подключении к БД Nice42ru Помощь студентам 0 07.01.2010 01:33
проблема при подключении компонентов parshik Компоненты Delphi 2 22.04.2009 22:13
Много ошибок в gl.h при подключении в визуал студио 2008 KrL^^ Общие вопросы C/C++ 1 12.04.2009 20:43