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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2013, 13:36   #11
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

TerminateThread() я закоментил... SuspendThread нужен вроде для приостановки потока, но у меня этот поток вообще не работает!
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 13:55   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а у вас приложение то ждет завершения потока? или так и закрывается?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.12.2013, 14:31   #13
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Нет... приложение сначала отправляет данные одним потоком, затем другим потоком читает их и затем закрывается. Синхронное чтение не подходило потому, что управляемая железка - макет, и пока работает через переходник USB - COM (в будущим этот переходник будит "реализован внутри" устройства), так вот приходящие данные он принимает не как целая посылка, а как 1 бай, первый... т.е. кол-во пришедших байт теряется. Сейчас запрос значение буфера вывел за пределы цикла
PHP код:
DWORD WINAPI WriteThread(LPVOID)
{
    
char bufwr 0;
    
cin >> bufwr// <=========== Это было в теле цикла
cout << "XEPHR" << endl;
 
DWORD tempsignal;    //temp - переменная-заглушка
 //char bufwr;
 
 
overlappedwr.hEvent CreateEvent(NULLtruetrueNULL);         //создать событие
/*SetCommMask(COMport,  EV_TXEMPTY);  */ 
 
 
while(1)
  {
   
//записать байты в порт (перекрываемая операция!)

   
WriteFile(COMport, &bufwrsizeof(bufwr), &temp, &overlappedwr);
   
cout << "XEPHR" << endl;

   
//приостановить поток, пока не завершится перекрываемая операция WriteFile
   
signal WaitForSingleObject(overlappedwr.hEventINFINITE);

   
//если операция завершилась успешно
   
if((signal == WAIT_OBJECT_0) && (GetOverlappedResult(COMport, &overlappedwr, &temptrue)))
     {
      
//вывести сообщение об этом в строке состояния
      
cout << "Передача прошла успешно" << endl
     }
   
//иначе вывести в строке состояния сообщение об ошибке
   
else 
   {
       
cout << "XEP" << endl;
   }

   
SuspendThread(writer);

  }

и ещё переписал
Код HTML:
writer = CreateThread(NULL, 0, WriteThread, NULL, 0 /*CREATE_SUSPENDED*/, NULL); 
WriteThread;
Т.е. вместо CREATE_SUSPENDED поставил 0, о чём сказал waleri
Так что передача идёт... правда в полной мере пока не проверил, но хоть с места тронулось!!!!!
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 14:46   #14
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

принимает 1 байт? так у тебя размер буфера 1 байт
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 16.12.2013, 15:29   #15
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Нет нет нет... Когда я экспериментировал на натуральном COM порте, я отправлял сразу несколько байт (последовательно один за другим) и параметр ф-ции ClearCommError(COMport, &temp, &comstat); мне показывал, что принято 3 байта. То же происходит когда я пользуюсь программой отсюда http://piclist.ru/S-COM-THREAD-RUS/S...HREAD-RUS.html. Но стоит перейти на переходник (к слову он - это переделанный от старого телефона, т.е. левый, новый пока не пришёл) то кол - во байт = 1. И даже сейчас, читающий поток считает что к нему пришёл сперва первый, затем его опять вызвали он прочёл второй и таким же макаром 3-ий. Причём последние 2 байта то читаются как отдельные 2, то как 2 но принятые за раз!! Мистика короче... в нашем деле без неё никуда
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 16:29   #16
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

не стоит надеться что байты считаются одним разом - не реалтайм система
чтоб с нуля сдвинуться - ты скажи что отправить надо и что принять, а так разговор о 2 байтах ниочем
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 16.12.2013, 17:06   #17
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Грендайзер Посмотреть сообщение
Нет... приложение сначала отправляет данные одним потоком, затем другим потоком читает их и затем закрывается.
В изначально выложенном варианте ничего подобното нет - приложение сразу завершается.

Цитата:
Сообщение от Грендайзер Посмотреть сообщение
Синхронное чтение не подходило потому, что управляемая железка - макет, и пока работает через переходник USB - COM (в будущим этот переходник будит "реализован внутри" устройства), так вот приходящие данные он принимает не как целая посылка, а как 1 бай, первый... т.е. кол-во пришедших байт теряется.
Синхронное чтение или несихронное не зависит от того где железка.
Кроме того, раз уж делаете асинхронное чтение, где у вас ожидание завершения?
То, что ReadFile завершился еще не значит, что данные получены.
waleri вне форума Ответить с цитированием
Старый 16.12.2013, 22:13   #18
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Под завершением Вы имеете в виду затушить процесс и всё такое. До этого руки не дошли пока. Тут блин опять задница, не могу понять... В консольном варианте программка работает на ура, а вот как только прикрутил её к окну, поток чтения сразу начал жрать все ресурсы...
Может подскажете, а то уже задолбался от этих сюрпризов!!!
В заголовочном файле описывается ф-ция
PHP код:
bool CreateCom (HANDLE&); 
которая открывает COM порт, и регистрирует структуру DCB.
Никак не пойму в чём дело, в консольном то приложении всё путём ведь было, что тут то случилось?
Осталось только этот вопрос дожать и всё, можно спокойно бухать пивасик!!! Так что буду охрененно благодарен за любую помощь!!!
Потоки

reader = CreateThread(NULL, 0, ReadThread, NULL, 0, NULL);
writer = CreateThread(NULL, 0, WriteThread, NULL, CREATE_SUSPENDED, NULL);

запускаю в функции
LRESULT CALLBACK XPEH(HWND hMainWnd, UINT msg, WPARAM wParam, LPARAM lParam)
во время создания окна
Вложения
Тип файла: rar wind32.rar (5.8 Кб, 6 просмотров)

Последний раз редактировалось Грендайзер; 16.12.2013 в 22:36.
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 22:22   #19
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

1. Задача учебная или реальная?
2. не мешай интерфейс с логикой!
3. тебе зачем именно 2 потока? обычно логика вмещается в один "дополнительный" поток.
4. для простоты напиши сначала рабочий однопоточный консольный вариант, независимый от "окошек", а уж потом раскладывай на потоки и кидай батоны.
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 16.12.2013, 22:39   #20
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Задача для учебно-реальная (хотя скорей реальная)
В консольном виде всё работало нормально, но мне программку надо сваять с доступным интерфейсом.
Хотя вот сейчас отказался от заголовочного файла и всё нормализовалось... только вот поток чтения всё равно помоиму не работает... Вообщем буду дальше эксперементировать... Спасибо за помощь.
Грендайзер вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение\Запись из файла vlados007 Общие вопросы C/C++ 1 10.03.2012 04:15
Запись в com порт gromsgu Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 26.11.2009 10:07
запись в порт 70h Makcydrl Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 05.06.2008 16:24
запись в порт по-максимуму :) Спартак Win Api 4 16.02.2008 22:22