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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2013, 17:31   #1
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию Работа с потоками VS2008

Добрый день!
я сделал приложение в консоли visual studio c++ для создания очереди с использованием потоков, пытаюсь переписать код для windows forms, но выскакивают сотни ошибок... можно ли переделать следующий код?

Код queue.h
Код:

#ifndef _QUEUE_H_
#define _QUEUE_H_
 
#include <iostream>
#include <string>
 
template<class T>
class NodeQueue
{
public:
        NodeQueue():head(0), tail(0)
        {
        }
 
        ~NodeQueue()
        {
             while(head)
             {
                 tail=head->next;
                 delete head;
                 head=tail;
             }
        }
 
        void enqueue(T val)
        {
                Node* Temp=new Node;
                Temp->elem=val;
                if(head==0)
                {
                        head=Temp;
                        tail=Temp;
                        return;
                }
                tail->next=Temp;
                tail=Temp;
        }
 
        void dequeue()
        {
                if (empty())
                {
                        throw std::string("Queue is empty");
                }
                Node* delPtr=head; 
             //   std::cout<<"Element "<< head->elem <<" is deleted from the queue\n";
				//Sleep(10);
                head=head->next; 
                delete delPtr;
        }

		 int sizequeue()
        {       int rezult=100;
             //   for(Node* ptr=head; ptr!=0; ptr=ptr->next)
              //          rezult++;
						return rezult;
        }
 
        const T& front() const
        {
                if (empty())
                {
                        throw std::string("Queue is empty");
                }
                return head->elem;
        }
 
        void print() const
        {
                if (empty())
                {
                        throw std::string("Queue is empty");
                }
                for(Node* ptr=head; ptr!=0; ptr=ptr->next)
                        std::cout<<ptr->elem<<' ';
                std::cout<<'\n';
        }
 
        bool empty() const
        {
                return head==0;
        }
private:
        struct Node
        {
                Node():next(0), elem(0)
                {
                }
                Node* next;
                T elem;
        };
        Node* head;
        Node* tail;
};
 
#endif

Код program.cpp

Код:

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <ddraw.h>
#include "queue.h"
#include<process.h>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <wchar.h>


HANDLE e;
NodeQueue<int> Queue;
int mas[]={1}; 
int blt=0;
int q_size=324*256;
int n=255;
unsigned __stdcall fwrite(void* p){
    int *pint=(int*)p, a;
	int size=0;
    a=*pint;
	go:
	if(Queue.sizequeue()<=q_size){
    try
        { 
       	Queue.enqueue(rand() % n);
		size++;
		}

	 catch(const std::string& e)
        {
             std::cout<<e<<'\n';
        }
	
    }

	
    SetEvent(e);
	goto go;
    return 0;
}


///////////////////////////////////////////////////////////////////////////

unsigned __stdcall fread(void* p){
    
	go_1:
	int *pint=(int*)p, a;
	
    a=*pint;
	
	char Frame[324*256]; 
	int count=0;
	


    while(Queue.sizequeue()>0){
    count=0;
     try
        {
        while (count<q_size){
		//std::cout<<"Top is: "<<Queue.front()<<'\n';
//Queue.print();
        Frame[count]=Queue.front();
		Queue.dequeue();
		count++;
		//Sleep(500);
		}
		std::cout<<"Perehod "<<'\n';


		}
		

	catch(const std::string& e)
        {
             std::cout<<e<<'\n';
        }


    }
    
    
	
	SetEvent(e);
	goto go_1;
    return 0;
}
////////////////////////////////////////////////////////////////////
 
int main()
{
	
    e=CreateEvent(NULL, FALSE, FALSE, NULL);
    _beginthreadex(NULL, 0, &fwrite, (void*)mas, 0, NULL);
    WaitForSingleObject(e, INFINITE);

	
    e=CreateEvent(NULL, FALSE, FALSE, NULL);
    _beginthreadex(NULL, 0, &fread, (void*)mas, 0, NULL);
    WaitForSingleObject(e, INFINITE);
	
 		system("PAUSE");
}
Пытаюсь сделать все это для виндовс формс, но никак не получается...посоветуйте как сделать пожалуйста.

Если есть замечания или код паршивый - буду рад выслушать их)
hunter03 вне форума Ответить с цитированием
Старый 23.08.2013, 17:38   #2
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию

и все же, как можно переделать это для windows forms
hunter03 вне форума Ответить с цитированием
Старый 24.08.2013, 22:53   #3
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

начни с малого, напиши форму, проверь правильно ли работает, потом минимальные функции ничего не делающие кроме разпоточивания программы, снова проверь правильно ли работет, ну и выполняй свои операции по одной, проверяя их работоспособность.
do not use your brain
Кащей вне форума Ответить с цитированием
Старый 25.08.2013, 16:15   #4
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию

окей, попробую так)
hunter03 вне форума Ответить с цитированием
Старый 25.08.2013, 21:24   #5
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию

Есть еще 1 вопрос:
как объявить в VS2008 глобальный массив типа int?

нашел такое решение, но не работает, выдает ошибки, может как то по другому можно?
Код:
public ref class Form1 : public System::Windows::Forms::Form
	{
        private:
                List<int> Points;
	public:
		Form1(void)
		{
			InitializeComponent();
			
                        Points=new List<int>();
hunter03 вне форума Ответить с цитированием
Старый 25.08.2013, 21:29   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
const size_t size = 255;
int array[size];  //что бы объект был глобальным,
//достаточно объявить его в глобальной области памяти

int main()
{ 
   ...
}
_Bers вне форума Ответить с цитированием
Старый 25.08.2013, 22:29   #7
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию

а в проекте windows forms?
hunter03 вне форума Ответить с цитированием
Старый 25.08.2013, 22:34   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от hunter03 Посмотреть сообщение
а в проекте windows forms?
Правила языка с++ не зависят от IDE.
_Bers вне форума Ответить с цитированием
Старый 25.08.2013, 22:39   #9
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
По умолчанию

только где бы я не пытался объявить этот массив в windows forms постоянно вылетают ошибки
hunter03 вне форума Ответить с цитированием
Старый 25.08.2013, 23:20   #10
Кащей
Форумчанин
 
Аватар для Кащей
 
Регистрация: 09.07.2013
Сообщений: 249
По умолчанию

ошибки в студию
do not use your brain
Кащей вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с потоками -Jack- Общие вопросы Delphi 4 09.08.2013 07:11
Работа с потоками derElektroBesen Помощь студентам 3 17.07.2011 14:33
Win32 API. VS2008. Как создать приложение win32 в vs2008? Aleksandr_Yanov Visual C++ 4 12.09.2010 00:59
работа с потоками session Общие вопросы C/C++ 6 21.06.2010 17:13
Работа с потоками Neymexa Общие вопросы .NET 16 23.04.2009 17:42