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

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

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

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

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

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

Всем доброго времени суток. Возникла небольшая проблемка, может кто поможет решить. Есть необходимость писать и читать из ком порта (RS-232) в асинхронном режиме. Вот здесь http://piclist.ru/S-COM-THREAD-RUS/S...HREAD-RUS.html нарыл инфу по этому делу и набросал кодик. Но вот проблема - он не работает.
Ф-ция ReadThread должна выдавать кол - во принятых файлов.
Ф-ция WriteThread пишет в файл.
Когда я запускаю программу, то происходит открытие и регистрация порта... и всё, на этом предлагается нажать любую кнопку для выхода.
Был бы крайне признателен за любую помощь. Заранее спасибо!
P.S. Постоянно пишет что ввожу много символов, поэтому прикрепил файлик.
Вложения
Тип файла: rar read_port2.rar (2.5 Кб, 13 просмотров)
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 05:58   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
reader = CreateThread(NULL, 0, ReadThread, NULL, 0, NULL);
ReadThread;
TerminateThread(reader,0);
замутил... марш про потоки читать!
ты написал типа этого
Код:
Родить поток
Не дать ему очухаться и прожить за него жизнь
анально отыметь его до смерти
поток должен спать, круться в бесконечном цикле или выполнять другую полезную работу - ДО ТЕХ ПОР ПОКА РАБОТАЮТ ПОРОЖДЕНЫЕ ПОТОКИ
а ты сразу заканчиваешь работу.
а вызов процедуры потока - ReadThread; в данном контексте лишний т.к. выполняется в основном потоке
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 16.12.2013 в 06:04.
Slym вне форума Ответить с цитированием
Старый 16.12.2013, 08:36   #3
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Мммм... А можно чуть подробнее. Я не программист, а инженер... работаю с железками, а тут вот программу управления для ПК нужно сваять, я по не знанке с WINAPI связался, а сейчас вот затянуло, так что хочу до конца добить Что же касается потоков, то читал, но вот определение а ля: поток это нить которую выполняет процесс или чё то в этом духе... Это блин как дать определение карданному валу, с использованием в качестве примера единорогов, какающих бабачками!!! Какая к чёрту нить!!!! Так что может маненько подсобите?

Последний раз редактировалось Грендайзер; 16.12.2013 в 08:38.
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 10:05   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Грендайзер Посмотреть сообщение
Какая к чёрту нить!!!!
http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B8%D1%8F
waleri вне форума Ответить с цитированием
Старый 16.12.2013, 10:26   #5
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Так в чём проблема то? есть 2 потока ReadThread и WriteThread. Они выполняются внутри main (уж и не знаю поток это или процесс). Почему они тогда не выполняются то?
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 10:41   #6
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

http://amm.16mb.com/%D1%81%D0%BE%D0%...%B8-winapi/34/ от, тут всё так же!!!
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 10:58   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

процесс - грубо программа
главный поток - первый созданный в программе поток, он создается автоматически, и умрет как только закончит работу
поток - созданный CreateThread дополнительный поток, поток умрет как только закончит работу
работа в потоке идет последовательно, от инструкции к инструкции, а потоки могут работать одновременно (на многопроцессорных системах)

Код:
void main(){
    DWORD ThreadId1, ThreadId2; //создаём идентификаторы потока
    HANDLE hThread1 = CreateThread(NULL, 0, func1, 0, 0, &ThreadId1);//создаём потоки
    HANDLE hThread2 = CreateThread(NULL, 0, func2, 0, 0, &ThreadId2);
    getch();//ожидаем нажатия клавиши для продолжения
    CloseHandle(hThread1); CloseHandle(hThread2); //Закрываем HANDLE}
заметь основной поток ждет (хоть и примитивно) пока дочерние потоки работают
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 16.12.2013 в 11:01.
Slym вне форума Ответить с цитированием
Старый 16.12.2013, 11:41   #8
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Ну хорошо, ну а у меня то что не так? main - основной поток, так? Порт я открыл. Далее в потоке
PHP код:
writer CreateThread(NULL0WriteThreadNULLCREATE_SUSPENDEDNULL); 
WriteThread
он у меня должен запросить значение bufwr, а так же вывести на консоль некоторые надписи, а эти 2 потока (для записи и чтения) просто игнорируются!!! Почему?
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 11:55   #9
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

В строчке
PHP код:
writer CreateThread(NULL0WriteThreadNULLCREATE_SUSPENDEDNULL); 
CREATE_SUSPENDED поменял на 0, стал выодить на консоль первое слово в функции... но до ввода так дело и не дошло!
Грендайзер вне форума Ответить с цитированием
Старый 16.12.2013, 12:23   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Грендайзер Посмотреть сообщение
но до ввода так дело и не дошло!
А вы почитайте, что делает TerminateThread() (А заодно и SuspendThread гляньте).
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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