Обсуждение Программирование на C/C++

gureedo

Самец :)
Типа чтобы нижнее слово возвратила? по-моему надо бы наоборот :).

не слово а байт.

даже в мсдн не заглянули....

The _getch and_getwch functions read a single character from the console without echoing the character. None of these functions can be used to read CTRL+C. When reading a function key or an arrow key, each function must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.
 

Бретон

Ословед
среда Builder6
как сконвертировать картинку из буфера обмена в чаровский массив ?
 

Krivych

Ословед
Подскажите пожалуйста как сделать чтобы в место кракозябр на экране был нормальный текст из команд
ReadFile(hf, buf, dwFileSize, &byteread, NULL);
TextOut(hdc,150,150,(LPCWSTR)buf,dwFileSize);

А по преобразую и не в какую. Главное читать фаил и сохранять все нормаль, а на экран все что угодно выводит.
 
GCC - Linux:

Выдаёт ошибку:
table.cpp: In member function ‘void Table::Run()’:
table.cpp:63: ошибка: ‘((Table*)this)->Table::fork’ нельзя использовать как функцию

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

Shell

Ословед
GCC - Linux:

Выдаёт ошибку:
table.cpp: In member function ‘void Table::Run()’:
table.cpp:63: ошибка: ‘((Table*)this)->Table::fork’ нельзя использовать как функцию

Но fork() я уже использовал пару раз в том же проекте, в аналогичных местах.
С чем может быть связана эта ошибка?
а конкретно строчка 63 и объявление fork в классе Table как выглядит?
 
Подскажите пожалуйста как сделать чтобы в место кракозябр на экране был нормальный текст из команд
ReadFile(hf, buf, dwFileSize, &byteread, NULL);
TextOut(hdc,150,150,(LPCWSTR)buf,dwFileSize);

А по преобразую и не в какую. Главное читать фаил и сохранять все нормаль, а на экран все что угодно выводит.

А на экран - это уже от кодировки зависит, и от шрифта. Файл-то поди русский?
 
а конкретно строчка 63 и объявление fork в классе Table как выглядит?

Уже написал без fork(), но вот реконструкция:
Код:
int Table :: Run (void)
{
    if (philosof_counter != 5)
    {
        cerr << "Неверное число философов!" << __FILE__ << __LINE__ << endl;
        return 0;
    }

    if (fork() > 0)
        return;

    msg ("Ready!");

    int philosof_ready = 0;
.........

fork() нифига не объявляется, это функция unix,
расщепит процесс на два независимых.

Для примера вот:
Код:
int Philosof :: Run (void)
{
    if (table_handle == NULL)
    {
        cerr << "Необходимо вначале зарегестрировать философа!" << __FILE__ << __LINE__ << endl;
        return 0;
    }

    if (fork() > 0)
        return 0;

    fputs ("Ready!\n", table_handle);
    fflush(table_handle);

    msg ("Ready!");
...............

Знакомо?
Тот же проект, другой класс, компилится.

Тут одно из двух или GCC - козёл, или я что-то не знаю о
fork().:(
 

CrazyBolt

Ословед
Тут одно из двух или GCC - козёл, или я что-то не знаю о fork().:(
ругать компиляторы не нада!!!
в общем, наскока я знаю, fork() создает новый процесс с таким же контекстом как и родительский, т.е. первый процесс продолжает выполняться, а второй процесс начинает свое выполнение с места вызова fork().
Код:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
 int result;
 result = fork();
 if(result <0)
 {
  printf("Can\'t fork child\n");
  exit(-1);
 } 
 else 
  if (result > 0) 
  {
   // ветка родительского процесса
   printf("Parent resume\n");
  } 
  else 
  {
   // ветка дочернего процесса
   printf("Child start\n");
  }                                       
 return 0;  
}
ты же в своем коде зачем-то пишешь:
Код:
if (fork() > 0)
   return;
т.е. сознательно игнорируешь ветку родительского процесса
 

Shell

Ословед
или я что-то не знаю о fork().:(
Компилятор почему-то считает, что fork элемент класса Table

Нужно смотреть описание класса, может в качестве имени переменной использовал, тем более в задаче о 5 философах за круглым столом они отбирали друг у друга вилки (fork), чтоб поесть

Для вызова глобальной функции при совпадении имени нужно писать так
if( ::fork()>0)
 

    GreenWyrm

    очки: 0
    Столько флуда, из-за моей невнимательности!
Компилятор почему-то считает, что fork элемент класса Table
Ух :shuffle:! Похоже прав ты, чё то я туплю!
Код:
class Table
{
    private:
        FILE *handle;
        char table_file [20];

        Fork fork[5];

        FILE *philosof_handle [5];
        int philosof_counter;
    public:
        Table (void);
        ~Table ();

        void Reg_philosof (Philosof& p);

        static const int exit_code = 100;
        int Run (void);
};
 

Krivych

Ословед
А на экран - это уже от кодировки зависит, и от шрифта. Файл-то поди русский?
Да уже все разобрался, оказывается одна команда работает под однобайтовой кодировкой вторая универсальна, и по стандарту читает в Юникоде.
Спасибо всеж что откликнулись.:)

Но вот я пока понят не могу почему текст выводится не сразу, а только если скрыть окно, или провести по нему другим. Так сказать нет мгновенной прорисовки.
 

Rommel

Ословед
Но вот я пока понят не могу почему текст выводится не сразу, а только если скрыть окно, или провести по нему другим. Так сказать нет мгновенной прорисовки.
Добавь для перерисовки окна, вроде должно помочь.
 

ShaDer

Ословед
Есть StringGrid, в его клетки выводятся изображения. StringGrid большой, поэтому заметно мерцание (вывод изображения в клетку - переход к следующей - и т.д., моментально не успевает, поэтому заметно мерцание). Как его убрать? Логика подсказывает, что надо создать вспомогательный Bitmap, рисовать на его канве, а затем отрисовать всё изображение целиком на канву нужного StringGrid. Пробовал - не работает, StringGrid остаётся белым почему-то.
 
Но вот я пока понят не могу почему текст выводится не сразу, а только если скрыть окно, или провести по нему другим. Так сказать нет мгновенной прорисовки
Для MFC
Invalidata()
или
PostMessage(WM_PAINT);
для WinApi HWND окна указать придется

Есть StringGrid ... Пробовал - не работает, StringGrid остаётся белым почему-то.
StringGrid1->DoubleBuffered = true;
 

Krivych

Ословед
Добавь для перерисовки окна, вроде должно помочь.
Он изначально стоит в месте с ShowWindow. Без него вообще бы не было текста.
Archy, Maximilyan спасибо помогло.
А вообще, случаем, нет каких нить сорсов на визуальное оформление хотябы даже с выводом через MessageBox на С++ через WinAPI, желательно с кучей функций. Просто для меня проще так разобраться чем литературу читать, у них там все просто. Ну или литературу.
 

Rommel

Ословед
А вообще, случаем, нет каких нить сорсов на визуальное оформление хотябы даже с выводом через MessageBox на С++ через WinAPI, желательно с кучей функций. Просто для меня проще так разобраться чем литературу читать, у них там все просто. Ну или литературу.
[url=ed2k://|file|%D0%A4%D1%80%D0%BE%D0%BB%D0%BE%D0%B2%D1%8B.rar|4057306|B9641AD5834783C778AA0C1BFF6273A9|h=LMJ5C7V5DBRRBVQESPV4USJQBYA5C6CF|/]Фроловы.rar 3.87 Мб 49.[24-27][/URL]
Есть только в таком виде, хорошая штука- исходники можно дергать.
Щупак Ю. - Win32 API. Эффективная разработка приложений.djvu 8.57 Мб 49.[24-27]
Р. М. Ганеев. - Проектирование интерфейса пользователя средствами Win32 API.pdf 12.80 Мб 49.[24-27]
Тоже неплохая литература
 
Сверху