Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Параллельное программирование на Си


Автор: margo1111 23.6.2012, 11:51
Здравствуйте, мне необходимо написать программу для управления модемом, данный модем может передавать информацию по трем каналам одновременно, я написала программу для одного канала, но не знаю как создать три канала и чтобы они фунционировали независимо от друг друга, и была возможна одновременная передача-прием по разным каналам. Подскажите, пожалуйста, а то уже никаких идей нет.... 

Автор: boostcoder 23.6.2012, 12:22
1. использовать асинхронный ввод-вывод.
2. использовать потоки.

Автор: margo1111 23.6.2012, 12:56
А какие команды для этого необходимы, я то везде пишут про стандартные потоки ввода-вывода?

Автор: magesi 23.6.2012, 13:06
Цитата(margo1111 @ 23.6.2012,  12:56)
А какие команды для этого необходимы, я то везде пишут про стандартные потоки ввода-вывода?

секвенция в паре с венъюнкицей - это если, как иммитировать асинхронную логику, или Вы не про это, если не, то про что именно?

Автор: Alexeis 23.6.2012, 13:07
Цитата(margo1111 @  23.6.2012,  13:56 Найти цитируемый пост)
я то везде пишут про стандартные потоки ввода-вывода? 

Вот такой запрос попробуйте http://www.google.md/search?q=%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%2B%2B&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

Автор: magesi 23.6.2012, 13:12
Цитата(Alexeis @ 23.6.2012,  13:07)
Цитата(margo1111 @  23.6.2012,  13:56 Найти цитируемый пост)
я то везде пишут про стандартные потоки ввода-вывода? 

Вот такой запрос попробуйте http://www.google.md/search?q=%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%2B%2B&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

она про чистый Си, а не Си++ аськнула вроде

Автор: boostcoder 23.6.2012, 13:13
margo1111, каким способом твой программа "общается" с модемом?

Автор: magesi 23.6.2012, 13:54
Цитата(boostcoder @ 23.6.2012,  13:13)
margo1111, каким способом твой программа "общается" с модемом?

Да, это интересно smile

еще какая ОС

если Венда, то COM-обеъкты в помощь и там куча всего готового
в *nix, я что-то вразумительного работающего не нашел, пришлось все самому ручками

а может она, вообще пишет нативный код под x86 , SPARC (без ОС)?  smile 

Автор: margo1111 23.6.2012, 14:05
Цитата(magesi @ 23.6.2012,  13:06)
секвенция с паре с венъюнкицей - это если, как иммитировать асинхронную логику, или Вы не про это, если не, то про что именно?

сразу говорю, программированием на Си занялась совсем недавно, и не совсем понимаю то такое и для чего нужен асинхронный ввод-вывод в данном случае, а понятие потоков тоже такое смутное, только догадки

Добавлено @ 14:06
Цитата(magesi @ 23.6.2012,  13:12)
Цитата(Alexeis @ 23.6.2012,  13:07)
Цитата(margo1111 @  23.6.2012,  13:56 Найти цитируемый пост)
я то везде пишут про стандартные потоки ввода-вывода? 

Вот такой запрос попробуйте http://www.google.md/search?q=%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%2B%2B&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

она про чистый Си, а не Си++ аськнула вроде

я пишу программу для Turbo C 2.01

Добавлено @ 14:11
Цитата(boostcoder @ 23.6.2012,  13:13)
margo1111, каким способом твой программа "общается" с модемом?

через LPT-порт, ОС - windows. 

Автор: magesi 23.6.2012, 14:22
Цитата(margo1111 @  23.6.2012,  14:05 Найти цитируемый пост)
сразу говорю, программированием на Си занялась совсем недавно

а это не Си, секвенция с венъюнкцией - общая идея асинхронности ( логика ), вы хоть на bash ее можете иммитировать


Цитата(margo1111 @  23.6.2012,  14:05 Найти цитируемый пост)
через LPT-порт, ОС - windows.

А точно Венда, а не DOS?

PS
Вам бы про while(true) { break; } а также про switch/case почитать бы, да и про многое другое тоже

Цитата(margo1111 @  23.6.2012,  14:05 Найти цитируемый пост)
я пишу программу для Turbo C 2.01

на турбо, а не для турбо

Вы пишите на турбо для работы с модемом

Вы бы лучше бы Ваш код заключили в тэг [code]

Автор: margo1111 23.6.2012, 14:30
Я понимаю, что мне многое надо почитать))) написала через те команды, которые знаю и понимаю) а всякие заумные слова связанные с асинхронной логикой тоже трудны для моего понимания....Но проблема от этого не решается....

Автор: magesi 23.6.2012, 14:40
Цитата(margo1111 @ 23.6.2012,  14:30)
Я понимаю, что мне многое надо почитать))) написала через те команды, которые знаю и понимаю) а всякие заумные слова связанные с асинхронной логикой тоже трудны для моего понимания....Но проблема от этого не решается....


Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

static char buffer[0x400];
static DWORD dw;
static OVERLAPPED ov;

int main(void)
{

    HANDLE hLPT = CreateFile(L"LPT1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if(hLPT != INVALID_HANDLE_VALUE)
    {
        printf("OK! Open LPT1...\r\n");
 
        strcpy(buffer, "Hello LPT!\r\n");
        WriteFile(hLPT, buffer, sizeof(buffer), &dw, &ov);
        CloseHandle(hLPT);
    }
    else
    {
        printf("Error open!\r\n");
        return 1;
    }

    return 0;    
}



Вы бы уточнили , какая именно у Вас версия Windows ( именно Windows , а не DOS ли это )?

А то , Вы заголовком dos.h и доисторической версией компилятора Си на мысль наводите, что Вы на какой-нибудь =~ Windows 3.1 сидите, да и LPT порт....

Цитата(margo1111 @  23.6.2012,  14:05 Найти цитируемый пост)
Эта программа для того чтобы организовать 1 канал передачи, у меня их три....как сделать три независимо протекаемх процесса, вот в чем мои мучения... 

учите , что такое семафор

Автор: margo1111 23.6.2012, 14:51
Windows 95, действительно доисторический))

Автор: magesi 23.6.2012, 14:53
Цитата(margo1111 @ 23.6.2012,  14:51)
Windows 95, действительно доисторический))

Лаба в универе, что ли?

Автор: margo1111 23.6.2012, 14:54
Спасибо большое за такое внимание к моей проблеме, пытаюсь пока что понять, все что Вы мне сказали...

Добавлено через 1 минуту и 4 секунды
Цитата(magesi @ 23.6.2012,  14:53)
Цитата(margo1111 @ 23.6.2012,  14:51)
Windows 95, действительно доисторический))

Лаба в универе, что ли?

Почти лаба....

Автор: magesi 23.6.2012, 15:04
Цитата(margo1111 @ 23.6.2012,  14:54)
Спасибо большое за такое внимание к моей проблеме, пытаюсь пока что понять, все что Вы мне сказали...

Добавлено @ 14:55
Цитата(magesi @ 23.6.2012,  14:53)
Цитата(margo1111 @ 23.6.2012,  14:51)
Windows 95, действительно доисторический))

Лаба в универе, что ли?

Почти лаба....

Попробуйте такой код на Вашем турбо , тогда , для отображения содержимого регистра по состоянию параллельного порта.

Код

#define PORT 0x378

#include <stdio.h>
#include <conio.h>
#include <dos.h>

static int data;

int main(void)
{
    clrscr();
    
    while(!kbhit())
    {
        data = inportb(PORT + 1);
        
        gotoxy(3, 0xa);
        
        printf("Доступные данные на регистрах: %3d | %3X\r\n", data, data);
        printf("\r\n Pin 15: %d", (data & 0x08) / 0x08);
        printf("\r\n Pin 13: %d", (data & 0x10) / 0x10);
        printf("\r\n Pin 12: %d", (data & 0x20) / 0x20);
        printf("\r\n Pin 11: %d", (data & 0x80) / 0x80);
        printf("\r\n Pin 10: %d", (data & 0x40) / 0x40);
        
        delay(0xa);
    }
    
    return 0;
}



Чтобы узнать наличие и адреса LPT порта на компьютере.

Код

#include <stdio.h>
#include <dos.h>

static unsigned int far *ptraddr;
static int address;
static int a;

int main(void)
{
    ptraddr = (unsigned int far*)0x00000408;
    
    clrscr();

    for(a = 0; a < 3; a++)
    {
        address = *ptraddr;
        
        if (address == 0)
        {
            printf("Не найдено порта для LPT %d\r\n", a + 1);
        }
        else
        {
            printf("Адрес порта для LPT%d is 0x%X \n", a + 1, address);
            ptraddr++;
        }
    }
    
    getch();
    
    return 0;
}

Автор: margo1111 23.6.2012, 15:15
Цитата(magesi @ 23.6.2012,  14:40)
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

static char buffer[0x400];
static DWORD dw;
static OVERLAPPED ov;

int main(void)
{

    HANDLE hLPT = CreateFile(L"LPT1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if(hLPT != INVALID_HANDLE_VALUE)
    {
        printf("OK! Open LPT1...\r\n");
 
        strcpy(buffer, "Hello LPT!\r\n");
        WriteFile(hLPT, buffer, sizeof(buffer), &dw, &ov);
        CloseHandle(hLPT);
    }
    else
    {
        printf("Error open!\r\n");
        return 1;
    }

    return 0;    
}


Эх...не сочтите за наглость...не могли бы Вы объяснить каждую строчку данной программы.....что она делает именно...буду оч благодарна...

Автор: magesi 23.6.2012, 15:22
margo1111, устройство в ОС может представляться в файла, а далее читайте msdn/гуглите правильными запросами, к примеру:

LPT C++ Windows
LPT C++
LPT C++ Windows howto
LPT CreateFile C++
LPT TurboC Windows 95

Что я могу Вам комментировать? Виндовые ф-ции из WinAPI , как CreateFile() / WriteFile() / CloseHandle() или стандартные из Сишной либы, как strcpy() ?

Здесь, в руки гугл конкретных ф-ций и что они делаеют читать и пробывать.... что Вы могли не знать, я в 1-ой строчке сказал, остальное читается самим

PS
Потом Вы не на этот код смотрите лучше, у Вас с Вашим старым TurboC будут проблемы с #include заголовка <Windows.h>
Я Вам привел дальше код, конкрертно под Ваш старый компилер 10летней давности и Windows95

Автор: margo1111 23.6.2012, 15:24
Цитата(magesi @ 23.6.2012,  15:22)
margo1111, устройство в ОС может представляться в файла, а далее читайте msdn/гуглите правильными запросами, к примеру:

LPT C++ Windows
LPT C++
LPT C++ Windows howto
LPT CreateFile C++
LPT TurboC Windows 95

Что я могу Вам комментировать? Виндовые ф-ции из WinAPI , как CreateFile() / WriteFile() / CloseHandle() или стандартный из Сишной либы, как strcpy() ?

Здесь, в руки гугл конкретных ф-ций и что они делаеют читать и пробывать.... что Вы могли не знать, я в 1-ой строчке сказал, остальное читается самим

ок...ещё раз ОГРОМНОЕ СПАСИБО!

Автор: margo1111 23.6.2012, 15:40
блин...все равно не понимаю, как организовать 3 независимых канала приема-передачи...

Автор: magesi 23.6.2012, 15:41
Цитата(margo1111 @ 23.6.2012,  15:40)
блин...все равно не понимаю, как организовать 3 независимых канала приема-передачи...

Вы про семафор почитали?

Автор: margo1111 23.6.2012, 15:51
Цитата(magesi @ 23.6.2012,  15:41)
Цитата(margo1111 @ 23.6.2012,  15:40)
блин...все равно не понимаю, как организовать 3 независимых канала приема-передачи...

Вы про семафор почитали?

да, там про какую то блокировку все пишут....может не то читаю...или совсем уж неумная

Автор: magesi 23.6.2012, 15:56
Цитата(margo1111 @  23.6.2012,  15:51 Найти цитируемый пост)
да, там про какую то блокировку все пишут....может не то читаю...или совсем уж неумная 

Вы не по-диагонали читайте... блокировка связана с построением очереди из потоков на обсуживание не более, чем опред. кол-ву потоков в модели семафора, как раз наиболее чаще используемая модели для асинхронности , которая применяется много где, для доступа потоков к файлам, при операциях с сокетами


Автор: boostcoder 23.6.2012, 16:17
magesi, margo1111, стоп!

margo1111, турбо С-2.0 - это DOS.
он не умеет компилировать для windows. он и WINAPI вряд ли поддерживает.
Вы уверены, что задача не для DOS?

Автор: magesi 23.6.2012, 16:18
boostcoder, а я что говорил? я ей сначала написал для Венды код, потом спросил не dos ли у нее и привел уже код для dos? Что мне-то стоп?  smile 

Цитата(boostcoder @  23.6.2012,  16:17 Найти цитируемый пост)
он не умеет компилировать для windows. он и WINAPI вряд ли поддерживает.

я про это писал уже, тут:

Код

Вы бы уточнили , какая именно у Вас версия Windows ( именно Windows , а не DOS ли это )?

А то , Вы заголовком dos.h и доисторической версией компилятора Си на мысль наводите, что Вы на какой-нибудь =~ Windows 3.1 сидите, да и LPT порт....



после чего уже привел для dos код и прокомментировал насчет <windows.h>

Код

PS
Потом Вы не на этот код смотрите лучше, у Вас с Вашим старым TurboC будут проблемы с #include заголовка <Windows.h>


ко мне-то какие претензии?  smile 

Автор: boostcoder 23.6.2012, 16:21
Цитата(magesi @  23.6.2012,  16:18 Найти цитируемый пост)
Что мне-то стоп?

слишком много информации даешь для неокрепшего ума.

Добавлено через 51 секунду
Цитата(magesi @  23.6.2012,  16:18 Найти цитируемый пост)
я про это писал уже, тут

я прочел топик по диагонали)

Автор: magesi 23.6.2012, 16:23
Цитата(boostcoder @  23.6.2012,  16:21 Найти цитируемый пост)
слишком много информации даешь для неокрепшего ума.

Неокрепший ум пытается модем поиметь через LPT  smile 
Еще чуть-чуть бы про ring0 и при помощи прерываний получать битики  smile будет спрашивать

PS
Кстати, ты не мог бы в мою соседнюю тему глянуть  smile а то у меня там секс Сях с Lua через Венду 
Спасибо тебе, заранее!  smile 

Автор: boostcoder 23.6.2012, 16:33
magesi, я под венду не писал уже года четыре. забыл все напрочь smile 

Автор: magesi 23.6.2012, 16:35
boostcoder, я в апоже  smile даже на StackOverflow мне не помогли.... мдя, пошел напьюсь... с девушкой расстался, теперь еще Винда не дает  smile жизнь - г*вно, что ли не *nix перейти , начну жизнь с нового листа  smile 

Автор: EvilsInterrupt 23.6.2012, 16:38
Цитата

жизнь - г*вно, что ли не *nix перейти , начну жизнь с нового листа

Не поверишь, там еще тяжелее, что не шаг, то сразу надо юзать команду man или смотреть в /usr/share/example/

Автор: magesi 23.6.2012, 16:42
EvilsInterrupt, там это где? где нет: COM/DCOM/COM+ для нормального общения с железками? там где когерентность процессов в Апоже? Там где непонятно по каким принципам были выбраны структуры для данных? где выбраны были на самые лучшие алгоритмы по асимптоте? где нет прослойки нормальной между ring0 && ring3 ( которая в 7 и 8 винде есть ), там где тонна goto в исходниках ядра, где не требуется совершенно? ты про этот [англ.]crap? )

Под *nix много, что понимается, даже такая экзотика, как Plan9 , где нет рутов... А можно заняться сексом с Minix smile  я же о конкретных планах не рассказал

PS
Офигеешь , но в Винде тоже маны есть!

Через /? | more  smile да и последних конослях, аля poweshell на man не скупились, даже, как *nix вызывается.

А что, для Венды читать надо меньше?  smile Что только работа с COM-объектами стоит с подсчетом ссылок.  smile 

ты попробуй нативно без всяких COM-объектов с usb взять битик хоть в Винде новой ( 7-8 ), т.е. без применения всякого готового ( libusb ( хотя это не работает нормально ), COM и прочего... ), это гораздо тяжелее будет, чем под *nix

boostcoder, потом для ее цели уже был дан и код по dos и turbo c с 2-умя ключевыми моментами по работе с LPT, и сказали про семафор  smile 

Я бы помог, все реализовать до коцна, но сейчас под рукой Windows 95 и модема с LPT портом ( да и LPT порта на компе ) - нету  smile 

Да и наверное, и у нее нет, это только в доисторическом универе экспонат остался такой, там наверное конкретно тестить и можно только.

Автор: boostcoder 23.6.2012, 17:04
Цитата(magesi @  23.6.2012,  16:42 Найти цитируемый пост)
EvilsInterrupt, там это где? где нет: COM/DCOM/COM+ для нормального общения с железками? там где когерентность процессов в Апоже? Там где непонятно по каким принципам были выбраны структуры для данных? где выбраны были на самые лучшие алгоритмы по асимптоте? где нет прослойки нормальной между ring0 && ring3 ( которая в 7 и 8 винде есть ), там где тонна goto в исходниках ядра, где не требуется совершенно? ты про этот [англ.]crap? )

под *nix много, что понимается, даже такая экзотика, как Plan9 , где нет рутов и можно заняться сексом с Minix   я же о конкретных планах не рассказал

может тебе в холивары?
странно подобное слышать от человека не работающего с линукс. это по принципу "верю во все что мне говорят" ?

Автор: margo1111 23.6.2012, 17:05
дос не дос, фиг знает))) разберусь сама потом, мне главное логику понять всего этого. Про семафоры, как я поняла: может находитс в трех состояниях: положит, отриц, нуль, типа прибавляет или вычитает значения для того чтобы определит состояние занят или свободен,  в моем случае необходимо создать 3 канала передачи, занято свободно мне этот факт не важен, мне просто надо чтобы одновременно по двум каналам я смогла передать различную информацию. Смысл в том что модем сделан на основе микросхемы которая рассчитана на передачу по трем каналам, но в типовой схеме её включения без LC-фильтра по расчетам переходного затухания качественная информация одновременно по нескольким каналам невозможна, так как большое влияние соседних каналов, я ставлю этот фильтр, и с ним эта передача по нескольким каналам должна быть(опят же по расчетам) возможна. Так при передаче информации я ввожу сетевой адрес модема, который должен принять эту информацию и несущую частоту, занят этот канал или нет мне неважно, я буду делать так что он свододен и от программы этого узнавать не требуется. Мне просто с помощью программы надо как то параллельно подать информацию на два канала, то есть задать параллельно два несущие частоты. Возможно ли это осуществить с помощю семафоров? 

Автор: boostcoder 23.6.2012, 17:07
margo1111, забудь про семафоры. в DOS`е их нет.
для начала определись, под какую ОС задачу решать нужно?

Автор: margo1111 23.6.2012, 17:07
Цитата(magesi @ 23.6.2012,  16:42)
Да и наверное, и у нее нет, это только в доисторическом универе экспонат остался такой, там наверное конкретно тестить и можно только.

Именно!!

Автор: magesi 23.6.2012, 17:09
Цитата(boostcoder @  23.6.2012,  17:04 Найти цитируемый пост)
может тебе в холивары?странно подобное слышать от человека не работающего с линукс. это по принципу "верю во все что мне говорят" ?

Почему, ты думаешь , что я не работал?  smile 

Мне уже под Android приходилось писать драйвер по работе с веб-камерой на NDK ( причем самые первые версии Андроида, когда еще попсовая Java там была , и все нормальное через NDK делали, и через JNI уже отдавали в Java , что рисовать на выходе ), и с ДПХ/алгоритмом Хаффмана приходилось имплементировать.

Работал я там, нет там нормального ничего ( по крайней мере не было, что на подобии легкого общения с железами, как: COM у Венды ), libusb и всякие 3-rd party самодельные либы, были полурабочим ( а порой и нерабочим ) куском, поэтому приходилось отказываться.

А что там  есть нормальная защита от проникования в ring0? или ядро переписали в нормальный вид? что-нибудь из этого сделали, именно 100% рабочим, а не черновые вар-ты?

Добавлено @ 17:10
Цитата(boostcoder @  23.6.2012,  17:07 Найти цитируемый пост)
margo1111, забудь про семафоры. в DOS`е их нет.

а с чего их нет? mutex/spinlock там что ли? ( в целом это в какой-то мере и есть упрощенный семафор )

а кто ей мешает самой модель семафора организовать?

Цитата(boostcoder @  23.6.2012,  17:07 Найти цитируемый пост)
для начала определись, под какую ОС задачу решать нужно?

win95 у них там, она уже писала

Цитата(boostcoder @  23.6.2012,  17:04 Найти цитируемый пост)
 это по принципу "верю во все что мне говорят" ? 

а вера при чем тут? что из того, что я перечислил, не совпадает? что они стали теперь даже данные хранить в нормальных структурах данных? Выбирая примитивные бинарные деревья, и не выбирая нормальные структуры данных для той или иной операции

ты исходы открывал всяких GNU-проектов, я всегда шалел, почему там не могу даже нормальные алгоритмы по сортировки выбирать?

возьми исходники FireFox , аж в комментах написано, что через g++ компилиться, код выглядит, как чисто сишный ( причем и для чистого си - плохой ), много goto ( причем с goto это болезнь какая-то у практически всех GNU проектов любого уровня сложности ), много где указатели в виде типа возвр. описаны ( за что можно смело насиловать ), в качестве алгоритма сортиворки merge sort ( слиянием ), а почему не Хоара ( quick sort ), это нормально? И такое безобразие в GNUшных проектах практически везде... Будет это ОС, браузер, интепретатор, редактор 3Д без разницы... Везде один раздолбайский стиль проектов, как будто бы писали на коленках и на скорости

стиль программирования какой там во многих проектах? да за такой, код в конторах руки оторвут

Автор: boostcoder 23.6.2012, 17:20
не стану комментировать. попросил модератора перенести в холивары.

Автор: EvilsInterrupt 23.6.2012, 17:40
boostcoder, Лучше бы на хабр

Автор: magesi 23.6.2012, 17:40
Цитата(boostcoder @  23.6.2012,  17:20 Найти цитируемый пост)
не стану комментировать. 

стань  smile только в личку или действительно в холиварах продолжим, хотя я не сторонник ни Венды, ни *nix я больше  smile сторонник 

Автор: margo1111 23.6.2012, 17:40
Сама прочитала, что Turbo C 2.0 для DOS предназначена, но там ОС Windows 95, и поскольку Turbo C 2.0 там стоит, то значит, что все работает. Возможно ли такое?   

Автор: magesi 23.6.2012, 17:40
EvilsInterrupt, я уже на хабре по похожей теме отписывался, ничего вразумительного *nix-сторонники не ответили ( собственно за что там отвечать, если там ничего нет  smile практически )

тоже так обижались, ничего толком не сказали конкретного, обрывистами фразами "промолчу" а как дело до конкретики, так сразу  smile и в итоге ничего сказано не было нормального для восприятия и что-то существенного

и потом уже много офиц. тестов уже проводили , Венда уделыает по производительности во многим сегментах и в embedded и др., уж с этим спорить тоже будете или как? )

Добавлено @ 17:41
Цитата(margo1111 @  23.6.2012,  17:40 Найти цитируемый пост)
Сама прочитала, что Turbo C 2.0 для DOS предназначена, но там ОС Windows 95

9x Венда на dos базируется

Автор: margo1111 23.6.2012, 17:55
Т.е. мне программу над писать на DOS, а в DOSe семафоров нет....и опять ничего непонятно.... smile 

Автор: magesi 23.6.2012, 17:58
margo1111, семафор - это абстрактная модель/объект с опред. свойствами и методами

где-то она изначально вшита и по ней работают, где-то нет... при работе с сокетами, люди и сейчас зачатую сами иммитирует семафоры вручную, Вы также можете но в отношении работы с модемом

Цитата(margo1111 @  23.6.2012,  17:55 Найти цитируемый пост)
Т.е. мне программу над писать на DOS, а в DOSe семафоров нет....и опять ничего непонятно....

изначально на компе вообще ничего нет, но люди живут пишут ОС, файловые системы, драйвера всякие к ус-вам и визуализацию, когда изнчально ничего нет, в чем проблема?  smile 

Автор: margo1111 23.6.2012, 18:03
а можно хотя бы пример, а то сама точно не додумаюсь...

Автор: magesi 23.6.2012, 18:20
Цитата(margo1111 @ 23.6.2012,  18:03)
а можно хотя бы пример, а то сама точно не додумаюсь...

Написал крайне примитивный пример на псевдо коде ( но идею понять можно, да и на Вики хорошо про семафор расписано )

Код

#define MAX_RETRIES 4

static int count;

class Semaphore
{
private:
    key_t key;
    int nSems;
    int semid;

    int initSem();

public:
    Semaphore(int);

    void getLock();

    void ReleaseLock();
};

void Semaphore::getLock(thread **obj, int *count)
{
    if(check(&obj) == -1 && *count >= MAX_RETRIES)
    {  
        std::cout << "нельзя сделать блокировку";
    }
    else
    {
         *count++;
    }
}

void Semaphore::ReleaseLock(thread **obj)
{
    if(check(&obj) == -1)
    {  
        std::cout << "нельзя реализовать блокировку";
    }
    else
    {
         *count--;
    }

}

int main(void)
{
    Semaphore *sem = new Semaphore(1);

    for(int i = 0; i < 1000; i++)
    {  
        sem->getLock();
        sem->ReleaseLock();
    }

    return 0;
}


Автор: boostcoder 23.6.2012, 18:26
жуть, насколько все не лаконично  smile 
Код

int Semaphore::getLock(thread **obj, int *count)
{
   return (check(&obj) == -1 && *count >= MAX_RETRIES)
      ? -1
      : (++(*count), 0)
   ;
}
int Semaphore::ReleaseLock(thread **obj)
{
    return (check(&obj) == -1)
      ? -1
      : (--(*count), 0)
   ;
}

Автор: magesi 23.6.2012, 18:28
Цитата(boostcoder @ 23.6.2012,  18:26)
жуть, насколько все не лаконично  smile 
Код

int Semaphore::getLock(thread **obj, int *count)
{
   return (check(&obj) == -1 && *count >= MAX_RETRIES)
      ? -1
      : (++(*count), 0)
   ;
}
int Semaphore::ReleaseLock(thread **obj)
{
    return (check(&obj) == -1)
      ? -1
      : (--(*count), 0)
   ;
}

И что ты тернарным оператором меня дразнишь?  smile  эти понты уже в прошлом, отладка с тернарным оператором крайне неудобна, да и компилятор все равно порежет код, как ему надо и приведет в итоге к тому же, что если бы было бы просто if-else с фигурными { }  smile я чисто для удобств при отладке отказался от таких понтов )

PS
Если тебе неймется лаконичная семантика, то вообще садись за Lisp или другую ф-циональщину, код , как произведение Рембрандта будет выглядеть, только это будет равносильно, как кататься на феррари по деревне ) 

Автор: boostcoder 23.6.2012, 18:33
Цитата(magesi @  23.6.2012,  18:28 Найти цитируемый пост)
И что ты тернарным оператором меня дразнишь?    эти понты уже в прошлом

откуда столько пафоса? (плюющий)

Цитата(magesi @  23.6.2012,  18:28 Найти цитируемый пост)
компилятор все равно порежет код

код пишется для людей, а не для компилятора.
и это ты где-то выше говорил о плохом качестве кода GNU проектов? глядя на "это", хочется сказать только одно: "чья бы корова мычала?" ©

Цитата(magesi @  23.6.2012,  18:28 Найти цитируемый пост)
я чисто для удобств при отладке отказался от таких понтов

т.е. написал этот псевдокод, ты собрался его отлаживать? smile 

Автор: magesi 23.6.2012, 18:36
Цитата(boostcoder @  23.6.2012,  18:33 Найти цитируемый пост)
код пишется для людей, а не для компилятора.

именно он пишется не только для программистов, но и для остального персонала, кто будет шляться с brakepoint по твоему коду, делать unit-тесты и прочее... и за тернарные операторы будет неудобная отладка программы, тебе dump будет сложнее смотреть в нужный момент, пока не вышло из блока if-else

Цитата(boostcoder @  23.6.2012,  18:33 Найти цитируемый пост)
и это ты где-то выше говорил о плохом качестве кода GNU проектов? глядя на "это", хочется сказать только одно: "чья бы корова мычала?" ©

ты издеваешься?  smile я , как настоящий гнушник щя на коленке написал код , чтобы объяснить девушке, как лучше

с чего ты решил, что использование тернарного оператора приветсвуется? обычно, если кто-то пишет так, то из отдела тестирования будет доносится громкий мат при неудобстве с отладками  smile 

я в свое время и лямбдами злородствовал в своем коде, знаешь что доносилось только из отделов? ) ( один только крик "лямбда-*уямба" чего стоило услышать на всю фирму ))) )

и нечего Путина цитировать, не к месту  smile 

Цитата(boostcoder @  23.6.2012,  18:33 Найти цитируемый пост)
т.е. написал этот псевдокод, ты собрался его отлаживать? 

думаю, что придется с такими темпами, плюс еще код переписывать ) еще учитывая , что у нее простой Си, а не СИ++

Цитата(boostcoder @  23.6.2012,  18:33 Найти цитируемый пост)
откуда столько пафоса? (плюющий)

исчо кому плевать надо ) вроде не я тернарый юзал для лаконичности программы

Добавлено @ 18:49
boostcoder, ты вроде лакончичность хотел, лови феррари ( реализация семафора ) на Лиспе  smile 
Код

(define (make-semaphore max) 
  (let ((count 0) 
        (cell (list false))) 
    (define (increment) 
      (set! count (+ count 1))) 
    (define (decrement) 
      (set! count (- count 1))) 
    (define (has-room?) (> max count)) 
    (define (the-semaphore m) 
      (cond ((eq? m 'acquire) 
             (if (has-room?) 
                 (increment) 
                 (if (test-and-set! cell) (the-semaphore 'acquire)))) 
            ((eq? m 'release) 
             (decrement) 
             (if (has-room?) (clear! cell))))) 
    the-semaphore)) 
 
(define (clear! cell) 
  (set-car! cell false)) 
 
(define (test-and-set! cell) 
  (if (car cell) 
      true 
      (begin (set-car! cell true) 
             false))) 


Ну, как лаконично?  smile 
Под это дуру бы дебаггер написать бы, замучаешься только даже с хвостовыми рекурсиями и замыканиями в коде )

PS
Кстати, это еще одна причина почему я перестал юзать всякие функторы ( лямбды и др. ф-циональные объекты ), тернарные операторы и прочее в императивных языках, т.к. смотрится нелепо немного... неймется, лаконичности, садисть за: Lisp, Haskell, Prolog, Erlang, F# и пиши лаконично smile можешь хоть часть проекта на ф-ционльшине написать, др. часть на императиве....

Ф-циональные штучки в императиве, это равносильно, что бомж оденет браслет Версачи...  smile 
посему, если хочется повыпендриваться с всякими функторами, кэррированием, замыканием и прочим, садись уж сразу за true ф-циональные ЯПы, а не частично... смотрися нелепо просто....

да и в С++ 0х ( 11 ) не привлек своими лямбдами и ф-циональной стороной, все равно до всех правил, которые есть в том же Haskell - далеко... скорее смотрится, как то , что есть такая возможность и не более... учитывая все аспекты и возможности того же Haskell 

Автор: math64 25.6.2012, 08:11
Чтобы писать под Windows95, нужно минимум Borland C++ 4.5 (из компиляторов Borland).
Но вероятно, нужно писать под DOS, поскольку нужно переводить LPT в режим передачи в обоих направлениях, а в Windows95 все стандартные драйверы LPT передают данные только от компьютера к принтеру (обратно идут только сигналы типа конца бумаги)
Как управлять каналами - нужно смотреть документацию на модем, и скорее всего этот модем то же допотопный или даже самодельный, так что в инете на него документацию не найти.

Автор: xvr 25.6.2012, 11:54
Цитата(math64 @  25.6.2012,  08:11 Найти цитируемый пост)
Как управлять каналами - нужно смотреть документацию на модем, и скорее всего этот модем то же допотопный или даже самодельный, так что в инете на него документацию не найти. 

Вот именно! С этого и надо начинать - с 3х канального модема на LPT (я даже не берусь себе представить, что это за монстр такой)!

А то уже девушку загрузили по полной - и семафоры и ring0 в ход пошли  smile 

Автор: k0rvin 25.6.2012, 13:44
Цитата(magesi @ 23.6.2012,  16:42)
Под *nix много, что понимается, даже такая экзотика, как Plan9, где нет рутов...

Не, Plan 9 не понимается, AFAIK.

Автор: k0rvin 25.6.2012, 14:04
Цитата(magesi @ 23.6.2012,  17:09)
а вера при чем тут? что из того, что я перечислил, не совпадает? что они стали теперь даже данные хранить в нормальных структурах данных? Выбирая примитивные бинарные деревья, и не выбирая нормальные структуры данных для той или иной операции

ты исходы открывал всяких GNU-проектов, я всегда шалел, почему там не могу даже нормальные алгоритмы по сортировки выбирать?

возьми исходники FireFox , аж в комментах написано, что через g++ компилиться, код выглядит, как чисто сишный ( причем и для чистого си - плохой ), много goto ( причем с goto это болезнь какая-то у практически всех GNU проектов любого уровня сложности ), много где указатели в виде типа возвр. описаны ( за что можно смело насиловать ), в качестве алгоритма сортиворки merge sort ( слиянием ), а почему не Хоара ( quick sort ), это нормально? И такое безобразие в GNUшных проектах практически везде... Будет это ОС, браузер, интепретатор, редактор 3Д без разницы... Везде один раздолбайский стиль проектов, как будто бы писали на коленках и на скорости

стиль программирования какой там во многих проектах? да за такой, код в конторах руки оторвут

Попробуй посмотреть исходники NetBSD, говорят, там неплохой код.

Автор: magesi 25.6.2012, 16:45
Цитата(k0rvin @  25.6.2012,  13:44 Найти цитируемый пост)
Не, Plan 9 не понимается, AFAIK. 

На каком основании?


Цитата(k0rvin @  25.6.2012,  14:04 Найти цитируемый пост)
Попробуй посмотреть исходники NetBSD, говорят, там неплохой код. 

Посмотрю на досуге именно NetBSD

Автор: k0rvin 25.6.2012, 17:42
Цитата(magesi @ 25.6.2012,  16:45)
На каком основании?

На том, что она имеет мало общего с оригинальной UNIX и даже не является POSIX-совместимой, зато отличий предостаточно и они довольно значимы. Хотя там есть эмуляция POSIX API и X11, но она весьма проста и позиционируется лишь как «крайняя мера» и весь софт рекомендуется переписывать заново в соответствии с идеологией и архитектурой системы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)