Myp3ik писал(а): тогда WaitForSingleObject не работает.
мне это не грозит. у меня все работает.
а поточный вариант жрет проц на 50 процентов . вероятно из-за цикла.
Myp3ik писал(а): тогда WaitForSingleObject не работает.
с какой целью ?Мурик писал(а):Sleep(1) в цикле и загрузка процессора минимальная.
СЦБист писал(а):с какой целью ?
СЦБист писал(а):жрет проц на 50 процентов . вероятно из-за цикла.
Ничем.СЦБист писал(а):чем смущает не поточная версия
Время исполнения кода в цикле исчезающе меньше 1 миллисекунды - и если добавить в цикл этот вызов - большую часть времени поток будет проводить в sleep-е, выскакивая оттуда раз в миллисекунду, чтобы проверить "чой-то там на улице?". Да и процессор во время Sleep-а будет заниматься более полезными деяниями нежели тупо цикл маслать с частотой пару сотен миллионов оборотов в секунду.СЦБист писал(а):с какой целью ?Мурик писал(а):Sleep(1)
Совершенно верно, но если евент ручной и уже засигнален - циклу ведь и положено пролетать Wait-ы как пшёнке через дизентерийного пациента.Myp3ik писал(а):Так WaitForSingleObject как раз и усыпляет цикл
Смысл использования потоков как раз в высвобождении ресурсов процессора, что-то вы делаете не такСЦБист писал(а): Поточный вариант сильно жрет процессор.
Не очень красиво, читать нужно все, даже if (btr == 0), складывать в отдельный буфер, основным потоком приложения обрабатывать этот буфер. Для определения начала-конца пакета гуглите.СЦБист писал(а): if (btr >= 100)
Vano79 писал(а):Смысл использования потоков как раз в высвобождении ресурсов процессора, что-то вы делаете не так![]()
е.
делай как хочешь. ))))))Vano79 писал(а):[ Не очень красиво,.
Если данные бинарные и в них может появиться любой байт из диапазона 0х00 - 0хFF - используем poll режим хоста с чексуммой для самоуспокоения. Если формат ASCII либо какие-то значения байтов заведомо не появятся в полезном теле посылки - выбираем из них кого-либо на роль терминатора и можем организовать асинхронный поток. Можно конечно вставлять мэджиков в начала пакетов и прикрывать задницы последних чексуммами после чего пытаться синхронизироваться на лету зачатками AI - но это скорее для сокрытия деталей реализации протокола от [начинающих] снифферистов может быть полезно.СЦБист писал(а):Произвольно или по запросу ПК ?
ниче не понял )))) решил передавать данные по запросу.Siarzhuk писал(а):[
Если данные бинарные и в них может появиться любой байт из диапазона 0х00 - 0хFF - используем poll режим хостае.
Код: Выделить всё
class Request
{
LARGE_INTEGER time;
bool request;
public:
Request()
{
SYSTEMTIME st;
FILETIME ft;
GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);
time.LowPart = ft.dwLowDateTime;
time.HighPart = ft.dwHighDateTime;
request = true;
Queue_message.push(212);
}
bool Check_request() const {return request;}
void Reset_request() {request = false;}
void Time_out_request()
{
LARGE_INTEGER time;
SYSTEMTIME st;
FILETIME ft;
GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);
time.LowPart = ft.dwLowDateTime;
time.HighPart = ft.dwHighDateTime;
if ((time.QuadPart - this->time.QuadPart) >= 5000000)
{
if (request)
{
MessageBox(NULL,_T("От микроконтроллера не получено ответа"),
_T("Ошибка связи"), MB_OK | MB_ICONERROR);
GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);
time.LowPart = ft.dwLowDateTime;
time.HighPart = ft.dwHighDateTime;
}
else request = true;
this->time = time;
Queue_message.push(212);
}
}
};Что так медленно? Не помешало бы увеличить скорость до 9600 или выше.СЦБист писал(а):скорость передачи 1200 бод
Мне вполне хватает. Пробовал передавать информацию по медным проволокам с транса.Мурик писал(а):[q] Не помешало бы увеличить скорость до 9600 или выше.