Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VC проблема :( 
:(
    Опции темы
Alexej8
Дата 5.5.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.5.2008

Репутация: нет
Всего: нет



Здравствуйте всем.

Я в VC решаю системы уравнений. Кое-как это вышло. Но сейчас нужно ко всему этот процесс визуализировать (то есть пошагово отображать результаты). А моих мощностей, к сожалению, на данном этапе не хватает. К тому же времени до защиты осталось чуть больше недели. Я в программировании слабоват совсем пока, поэтому решил обратиться к гуру, может, кто подскажет из специалистов.
Дело в чем: у меня есть главная процедура в ней нужно сделать остановки и продолжать толи по нажатию кнопки, толи просто по таймеру,но начально эо не предуматривалось и теперь не знаю возможно так сделать при такой структуре
  
Код

void CZGaussDlg::ZGauss(double *pA, double *pB, double *pX, int n)   
{     
    for(int j=0;j<(n-1);j++)  
    {  
        int m=MaxElem(pA,j,n);  
// 1 Первая остановка  
        ChangeRow(pA,pB,j,m,n);  
// 2 Вторая остановка  
        ExchangeData(pM,pF,n);  
        for (int i=j+1;i<n;i++)  
        {  
            SumRow(pA,pB,j,i,n);  
// 3 Третья осановка  
            ExchangeData(pM,pF,n);  
        }   
    }   
    //обратный ход   
    UpdateData(FALSE);   
    for (int i=(n-1);i>=0;i--)   
    {                                 
        double s=pB[i];               
 
        double *p=pA+i*(n+1)+1;       
 
        for (j=i+1;j<n;j++,p++)  
        {  
            s-=*p*pX[j];              
          
        }   
        pX[i]=s/ *(pA+i*(n+1));        
    }   
// 4 Четвертая остановка   
    ExchangeData(pM,pF,n);   
    //перед неизв   
    for (i=0; i<n; i++)   
        for (int j=0; j<(n*n); j+=n)   
            SetDlgItemInt(30000+i+j,pX[i]);   
    m_calc_on_step.EnableWindow(FALSE);   
    UpdateData(FALSE);   
}   

1,2,3,4: вот в этих местах мне нужно делать паузу,чтоб пользователь видел что происходит с матрицей. Ребят, подскажите возможно это сделать при такой структуре или мои дела совсем плохи? smile 
Работаю в Microsoft Visual Studio 6.0
PM MAIL   Вверх
Lazin
Дата 5.5.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



Разбить на 4-ре функции smile 
PM MAIL Skype GTalk   Вверх
Alexej8
Дата 5.5.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.5.2008

Репутация: нет
Всего: нет



ведь у меня первых 3 остановки должно быть внутри цикла. как же его разорвать на ф-ции? smile  
все, ушел вешаться :(
PM MAIL   Вверх
dizzy1984
Дата 6.5.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Можно подождать фиксированный момент времени с помощью Sleep.
С кнопками тоже можно; единственное что пока пришло в голову - выполнять вычисления в отдельном потоке и останавливать его по глобальному флагу, который включается в обработчике нажатия кнопки. Собственно, самой большой проблемой тут я вижу визуализацию - как ты это будешь показывать?
PM MAIL   Вверх
ama_kid
Дата 6.5.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Alexej8, из того, что я увидел, мне ясно следующее: остановки можно сделать в двух местах - в начале функции ChangeRow и в начале функции ExchangeData. А уж как эти остановки реализовать - зависит от того, как ты собрался визуализировать "процесс"..

Это сообщение отредактировал(а) ama_kid - 6.5.2008, 12:47


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Alexej8
Дата 6.5.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.5.2008

Репутация: нет
Всего: нет



Спасиб, что не оставили без внимания пост. smile 
Sleep, думаю, не совсем то.  А вот потоки это уже интересней. Мне вот вчера тоже подсказали, что можно прерывать основной поток с помощью SuspendThread/ResumeThread. Вот только проблема: я с ними никогда не сталкивался и не знаю как с ними работать.. Может у кого есть простые примерчики с потоками или ссылки знаете, где это хорошо описано.. буду очень признателен. очень нужно.   smile smile 
А визуализация будет происходит так: после каждого действия значения элементов матрицы будут обновляться в едитах. Ну и если повезет, разберусь с работой РичЕдита, в котором будет описание каждого действия.

Это сообщение отредактировал(а) Alexej8 - 6.5.2008, 18:25
PM MAIL   Вверх
dizzy1984
Дата 7.5.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



немного переделал
VS6.0

Хидер
Код

struct params
{
double *pA;
double *pB;
double *pX;
int n;
};

class CZGaussDlg : public CDialog
{
//...
unsigned int m_threadHandle;
params m_params;
static unsigned int __stdcall ZGauss(void *p);
//...
}


Файл реализации
Код

//...
#include <process.h>
//...
<функция вызывающая CZGaussDlg::ZGauss>
{
unsigned int dummy;
// Инициализация параметров
m_params.n = ..;
m_params.pA = ..;
m_params.pB = .. ;
m_params.pX = ..;
    
m_threadHandle = _beginthreadex(NULL, 0, ZGauss, &m_params, 0, &dummy);
//...
}

void CZGaussDlg::OnOK() 
{
// К примеру ок играет роль кнопки "далее"
ResumeThread(reinterpret_cast<HANDLE>(m_threadHandle));
//CDialog::OnOK();
}

// Вариант с SuspendThread
unsigned int CZGaussDlg::ZGauss(void *p)
{      
    double *pA = reinterpret_cast<params*>(p)->pA;
    double *pB = reinterpret_cast<params*>(p)->pB;
    double *pX = reinterpret_cast<params*>(p)->pX;
    int n      = reinterpret_cast<params*>(p)->n;

    for(int j=0;j<(n-1);j++)    
    {    
        int m=MaxElem(pA,j,n);    
        // Вывод результатов
        SuspendThread(GetCurrentThread());
        ChangeRow(pA,pB,j,m,n);    
        // Вывод результатов
        SuspendThread(GetCurrentThread());
        ExchangeData(pM,pF,n);    
        for (int i=j+1;i<n;i++)    
        {    
            SumRow(pA,pB,j,i,n);    
            // Вывод результатов
            SuspendThread(GetCurrentThread());
            ExchangeData(pM,pF,n);    
        }    
    }    
    //обратный ход    
    UpdateData(FALSE);    
    for (int i=(n-1);i>=0;i--)    
    {                                  
        double s=pB[i];                
    
        double *p=pA+i*(n+1)+1;        
    
        for (j=i+1;j<n;j++,p++)    
        {    
            s-=*p*pX[j];               
           
        }    
        pX[i]=s/ *(pA+i*(n+1));         
    }    
    // Вывод результатов
    SuspendThread(GetCurrentThread());
    ExchangeData(pM,pF,n);    
    //перед неизв    
    for (i=0; i<n; i++)    
        for (int j=0; j<(n*n); j+=n)    
            SetDlgItemInt(30000+i+j,pX[i]);    
    m_calc_on_step.EnableWindow(FALSE);    
    UpdateData(FALSE);    


// Вариант с Sleep
unsigned int CZGaussDlg::ZGauss(void *p)    
{      
    double *pA = reinterpret_cast<params*>(p)->pA;
    double *pB = reinterpret_cast<params*>(p)->pB;
    double *pX = reinterpret_cast<params*>(p)->pX;
    int n      = reinterpret_cast<params*>(p)->n;

    for(int j=0;j<(n-1);j++)    
    {    
        int m=MaxElem(pA,j,n);    
        // Вывод результатов
        Sleep(3000);
        ChangeRow(pA,pB,j,m,n);    
        // Вывод результатов
        Sleep(3000);
        ExchangeData(pM,pF,n);    
        for (int i=j+1;i<n;i++)    
        {    
            SumRow(pA,pB,j,i,n);    
            // Вывод результатов
            Sleep(3000);
            ExchangeData(pM,pF,n);    
        }    
    }    
    //обратный ход    
    UpdateData(FALSE);    
    for (int i=(n-1);i>=0;i--)    
    {                                  
        double s=pB[i];                
    
        double *p=pA+i*(n+1)+1;        
    
        for (j=i+1;j<n;j++,p++)    
        {    
            s-=*p*pX[j];               
           
        }    
        pX[i]=s/ *(pA+i*(n+1));         
    }    
    // Вывод результатов
    Sleep(3000);
    ExchangeData(pM,pF,n);    
    //перед неизв    
    for (i=0; i<n; i++)    
        for (int j=0; j<(n*n); j+=n)    
            SetDlgItemInt(30000+i+j,pX[i]);    
    m_calc_on_step.EnableWindow(FALSE);    
    UpdateData(FALSE);    


Некрасивый момент заключается в том, что поток не закрывается перед закрытием программы (например, если мы нажали на cancel), но, по идее, ОС это сама сделает, так что проблемы тут не должно быть.

Это сообщение отредактировал(а) dizzy1984 - 7.5.2008, 11:34
PM MAIL   Вверх
Alexej8
Дата 7.5.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.5.2008

Репутация: нет
Всего: нет



dizzy, Спасибо Вам огромное. smile  Пойду пробовать. Надеюсь, что все правильно вставлю и все заработает smile 
PM MAIL   Вверх
VFaraon
Дата 17.5.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.12.2006
Где: Боярка, UA

Репутация: нет
Всего: нет



Здравствуйте!
Решил я научиться работать с MySQL. Но до этого работал только в Builder, а сейчас решил основательно осваивать Visual C++. Ближе к делу: когда пытаюсь скомпилировать проект с включенными хидерами пишет следуюющее:

Цитата


------ Build started: Project: test, Configuration: Debug Win32 ------
Compiling...
test.cpp
Linking...
test.obj : error LNK2028: unresolved token (0A00015F) "public: __thiscall mysqlpp::mysql_type_info::mysql_type_info(class mysqlpp::mysql_type_info const &)" (??0mysql_type_info@mysqlpp@@$$FQAE@ABV01@@Z) referenced in function "public: __thiscall mysqlpp::Field::Field(class mysqlpp::Field const &)" (??0Field@mysqlpp@@$$FQAE@ABV01@@Z)
test.obj : error LNK2028: unresolved token (0A0001B3) "public: __thiscall mysqlpp::String::String(class mysqlpp::String const &)" (??0String@mysqlpp@@$$FQAE@ABV01@@Z) referenced in function "void __cdecl std::_Construct<class mysqlpp::String,class mysqlpp::String>(class mysqlpp::String *,class mysqlpp::String const &)" (??$_Construct@VString@mysqlpp@@V12@@std@@$$FYAXPAVString@mysqlpp@@ABV12@@Z)
test.obj : error LNK2028: unresolved token (0A0001B4) "public: __thiscall mysqlpp::String::~String(void)" (??1String@mysqlpp@@$$FQAE@XZ) referenced in function "public: void * __thiscall mysqlpp::String::`scalar deleting destructor'(unsigned int)" (??_GString@mysqlpp@@$$FQAEPAXI@Z)
test.obj : error LNK2028: unresolved token (0A0001B7) "public: class mysqlpp::String & __thiscall mysqlpp::String::operator=(class mysqlpp::String const &)" (??4String@mysqlpp@@$$FQAEAAV01@ABV01@@Z) referenced in function "class mysqlpp::String * __cdecl std::_Copy_backward_opt<class mysqlpp::String *,class mysqlpp::String *,struct std::forward_iterator_tag>(class mysqlpp::String *,class mysqlpp::String *,class mysqlpp::String *,struct std::forward_iterator_tag,struct std::_Nonscalar_ptr_iterator_tag,struct std::_Range_checked_iterator_tag)" (??$_Copy_backward_opt@PAVString@mysqlpp@@PAV12@Uforward_iterator_tag@std@@@std@@$$FYAPAVString@mysqlpp@@PAV12@00Uforward_iterator_tag@0@U_Nonscalar_ptr_iterator_tag@0@U_Range_checked_iterator_tag@0@@Z)
test.obj : error LNK2028: unresolved token (0A000659) "extern "C" void __stdcall mysql_free_result(struct st_mysql_res *)" (?mysql_free_result@@$$J14YGXPAUst_mysql_res@@@Z) referenced in function "public: void __thiscall mysqlpp::RefCountedPointerDestroyer<struct st_mysql_res>::operator()(struct st_mysql_res *)const " (??R?$RefCountedPointerDestroyer@Ust_mysql_res@@@mysqlpp@@$$FQBEXPAUst_mysql_res@@@Z)
test.obj : error LNK2028: unresolved token (0A000730) "public: __thiscall mysqlpp::Connection::Connection(class mysqlpp::Connection const &)" (??0Connection@mysqlpp@@$$FQAE@ABV01@@Z) referenced in function "public: __thiscall mysqlpp::UnixDomainSocketConnection::UnixDomainSocketConnection(class mysqlpp::UnixDomainSocketConnection const &)" (??0UnixDomainSocketConnection@mysqlpp@@$$FQAE@ABV01@@Z)
test.obj : error LNK2028: unresolved token (0A000733) "public: virtual __thiscall mysqlpp::Connection::~Connection(void)" (??1Connection@mysqlpp@@$$FUAE@XZ) referenced in function "public: __thiscall mysqlpp::UnixDomainSocketConnection::UnixDomainSocketConnection(class mysqlpp::UnixDomainSocketConnection const &)" (??0UnixDomainSocketConnection@mysqlpp@@$$FQAE@ABV01@@Z)
test.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall mysqlpp::Connection::~Connection(void)" (??1Connection@mysqlpp@@$$FUAE@XZ) referenced in function "public: __thiscall mysqlpp::UnixDomainSocketConnection::UnixDomainSocketConnection(class mysqlpp::UnixDomainSocketConnection const &)" (??0UnixDomainSocketConnection@mysqlpp@@$$FQAE@ABV01@@Z)
test.obj : error LNK2019: unresolved external symbol "public: __thiscall mysqlpp::Connection::Connection(class mysqlpp::Connection const &)" (??0Connection@mysqlpp@@$$FQAE@ABV01@@Z) referenced in function "public: __thiscall mysqlpp::UnixDomainSocketConnection::UnixDomainSocketConnection(class mysqlpp::UnixDomainSocketConnection const &)" (??0UnixDomainSocketConnection@mysqlpp@@$$FQAE@ABV01@@Z)
test.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall mysqlpp::Connection::connect(char const *,char const *,char const *,char const *,unsigned int)" (?connect@Connection@mysqlpp@@UAE_NPBD000I@Z)
test.obj : error LNK2019: unresolved external symbol "public: __thiscall mysqlpp::mysql_type_info::mysql_type_info(class mysqlpp::mysql_type_info const &)" (??0mysql_type_info@mysqlpp@@$$FQAE@ABV01@@Z) referenced in function "public: __thiscall mysqlpp::Field::Field(class mysqlpp::Field const &)" (??0Field@mysqlpp@@$$FQAE@ABV01@@Z)
test.obj : error LNK2019: unresolved external symbol "extern "C" void __stdcall mysql_free_result(struct st_mysql_res *)" (?mysql_free_result@@$$J14YGXPAUst_mysql_res@@@Z) referenced in function "public: void __thiscall mysqlpp::RefCountedPointerDestroyer<struct st_mysql_res>::operator()(struct st_mysql_res *)const " (??R?$RefCountedPointerDestroyer@Ust_mysql_res@@@mysqlpp@@$$FQBEXPAUst_mysql_res@@@Z)
test.obj : error LNK2019: unresolved external symbol "public: __thiscall mysqlpp::String::~String(void)" (??1String@mysqlpp@@$$FQAE@XZ) referenced in function "public: void * __thiscall mysqlpp::String::`scalar deleting destructor'(unsigned int)" (??_GString@mysqlpp@@$$FQAEPAXI@Z)
test.obj : error LNK2019: unresolved external symbol "public: __thiscall mysqlpp::String::String(class mysqlpp::String const &)" (??0String@mysqlpp@@$$FQAE@ABV01@@Z) referenced in function "void __cdecl std::_Construct<class mysqlpp::String,class mysqlpp::String>(class mysqlpp::String *,class mysqlpp::String const &)" (??$_Construct@VString@mysqlpp@@V12@@std@@$$FYAXPAVString@mysqlpp@@ABV12@@Z)
test.obj : error LNK2019: unresolved external symbol "public: class mysqlpp::String & __thiscall mysqlpp::String::operator=(class mysqlpp::String const &)" (??4String@mysqlpp@@$$FQAEAAV01@ABV01@@Z) referenced in function "class mysqlpp::String * __cdecl std::_Copy_backward_opt<class mysqlpp::String *,class mysqlpp::String *,struct std::forward_iterator_tag>(class mysqlpp::String *,class mysqlpp::String *,class mysqlpp::String *,struct std::forward_iterator_tag,struct std::_Nonscalar_ptr_iterator_tag,struct std::_Range_checked_iterator_tag)" (??$_Copy_backward_opt@PAVString@mysqlpp@@PAV12@Uforward_iterator_tag@std@@@std@@$$FYAPAVString@mysqlpp@@PAV12@00Uforward_iterator_tag@0@U_Nonscalar_ptr_iterator_tag@0@U_Range_checked_iterator_tag@0@@Z)
C:\Documents and Settings\Admin\Мои документы\Visual Studio 2005\Projects\test\Debug\test.exe : fatal error LNK1120: 15 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2005\Projects\test\test\Debug\BuildLog.htm"
test - 16 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========




И так с каждым (включал поодельности) файлом.
Как это решить?
PM MAIL   Вверх
dizzy1984
Дата 19.5.2008, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



VFaraon, создавай новый топик в соответствующем разделе и я помогу разобраться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1039 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.