|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
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 код:
Код HTML:
writer = CreateThread(NULL, 0, WriteThread, NULL, 0 /*CREATE_SUSPENDED*/, NULL); WriteThread; Так что передача идёт... правда в полной мере пока не проверил, но хоть с места тронулось!!!!! |
16.12.2013, 14:46 | #14 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
принимает 1 байт? так у тебя размер буфера 1 байт
Не стесняемся, плюсуем!
|
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 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
не стоит надеться что байты считаются одним разом - не реалтайм система
чтоб с нуля сдвинуться - ты скажи что отправить надо и что принять, а так разговор о 2 байтах ниочем
Не стесняемся, плюсуем!
|
16.12.2013, 17:06 | #17 | ||
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Цитата:
Цитата:
Кроме того, раз уж делаете асинхронное чтение, где у вас ожидание завершения? То, что ReadFile завершился еще не значит, что данные получены. |
||
16.12.2013, 22:13 | #18 |
Пользователь
Регистрация: 15.10.2013
Сообщений: 29
|
Под завершением Вы имеете в виду затушить процесс и всё такое. До этого руки не дошли пока. Тут блин опять задница, не могу понять... В консольном варианте программка работает на ура, а вот как только прикрутил её к окну, поток чтения сразу начал жрать все ресурсы...
Может подскажете, а то уже задолбался от этих сюрпризов!!! В заголовочном файле описывается ф-ция PHP код:
Никак не пойму в чём дело, в консольном то приложении всё путём ведь было, что тут то случилось? Осталось только этот вопрос дожать и всё, можно спокойно бухать пивасик!!! Так что буду охрененно благодарен за любую помощь!!! Потоки 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) во время создания окна Последний раз редактировалось Грендайзер; 16.12.2013 в 22:36. |
16.12.2013, 22:22 | #19 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
1. Задача учебная или реальная?
2. не мешай интерфейс с логикой! 3. тебе зачем именно 2 потока? обычно логика вмещается в один "дополнительный" поток. 4. для простоты напиши сначала рабочий однопоточный консольный вариант, независимый от "окошек", а уж потом раскладывай на потоки и кидай батоны.
Не стесняемся, плюсуем!
|
16.12.2013, 22:39 | #20 |
Пользователь
Регистрация: 15.10.2013
Сообщений: 29
|
Задача для учебно-реальная (хотя скорей реальная)
В консольном виде всё работало нормально, но мне программку надо сваять с доступным интерфейсом. Хотя вот сейчас отказался от заголовочного файла и всё нормализовалось... только вот поток чтения всё равно помоиму не работает... Вообщем буду дальше эксперементировать... Спасибо за помощь. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чтение\Запись из файла | 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 |