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


Автор: cymtu 1.11.2010, 07:08
проект на Visual C++ 2010 Express приложение Windows Forms

Form1.h
Код

private: void Start(void* pParams)
{
    while( repeat )
    {
       ...
    }
    _endthread();
}
private: System::Void toolStripMenuItem5_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             if(!repeat)
             {   
                 repeat=true;
                 _beginthread(Start, 0, NULL);
             }
         }
private: System::Void toolStripMenuItem6_Click(System::Object^  sender, System::EventArgs^  e)
         {
        bool repeat = false;
         }


выдает сообщение об ошибке

Ошибка    1    error C3867: Example::Form1::Start: в вызове функции отсутствует список аргументов; используйте "&Example::Form1::Start" для создания указателя на член    f:\Example\Example\Form1.h    446    1    Example

Что не так?????
Люди пожалуйста подскажите...


Автор: azesmcar 1.11.2010, 08:02
Цитата(cymtu @  1.11.2010,  07:08 Найти цитируемый пост)
Что не так?????

Функция не та. _beginthread принимает указатель на обычную функцию, а ты передаешь member функцию. Либо сделай функцию static, либо используй boost::bind (хотя если подключен boost то зачем использовать _beginthread?), либо сам напиши передачу this и вызов member функции.
И не используй _beginthread smile  только _beginthreadex.

Добавлено через 2 минуты и 27 секунд
так это еще и .NET smile 
Ты уверен, что тебе нужен C++ .NET? Зачем ты выбрал этот язык? Почему не C# и зачем использовать _beginthread когда у тебя вся мощь .NET под рукой?

Автор: cymtu 1.11.2010, 08:30
Цитата

Ты уверен, что тебе нужен C++ .NET?


Программирую в основном Borland C++
Поэтому использую, то что ближе, с С# вообще никогда не имел дел.

Цитата

  _beginthread когда у тебя вся мощь .NET под рукой?

Реализацией потоков в NET тоже не занимался. Прочитал про функцию _beginthread вот и играюсь с ней.
Если тебя ужасает мой пример, расскажи как проще реализовать программу, которая бы запускала и останавливала поток.

Автор: azesmcar 1.11.2010, 08:39
cymtu

C++ for .NET создан не для того, чтобы на нем проекты писались, его создали затем, чтобы существующие проекты/библиотеки можно было безболезненно перенести на .NET.

Цитата(cymtu @  1.11.2010,  08:30 Найти цитируемый пост)
с С# вообще никогда не имел дел.

А с C++ for .NET? C# намного ближе к тому C++, который ты знаешь чем это извращение.
Может самое время начать?

Цитата(cymtu @  1.11.2010,  08:30 Найти цитируемый пост)
Если тебя ужасает мой пример, расскажи как проще реализовать программу, которая бы запускала и останавливала поток.

он меня не ужасает, но зачем так писать?

Автор: mrbrooks 1.11.2010, 09:07
cymtu, то что ты делаешь, нет даже в камасутре.

Автор: xvr 1.11.2010, 12:02
Цитата(cymtu @  1.11.2010,  07:08 Найти цитируемый пост)
Что не так?????
Не так попытка использовать Win32 Native Threads в CLR. Они вместе не живут, никак  smile 
Используй http://msdn.microsoft.com/en-us/library/798axes2.aspx и C#


Автор: cymtu 3.11.2010, 10:54
Вот вы тут все пишите переходи на С#.
Возможно и действительно стоит переходить, но первоначально хотелось бы узнать, а как в C# обстоит работа там с ссылками??? Насколько я знаю работать с ними в С# не рекомендуется.

Вопрос (???) не возникнет ли проблема с реализацией такой схемы

Есть обычный Узел Node

Код

class Node
{
    (...)
    Node*  prev;
    Node*  next;
    Node*  pnode; 
}


Есть список из этих узлов ListNode
Код

class ListNode
{
    (...)
    Node*  beg;
    Node*  end;
}


Есть узел Node2
Код

class Node2
{
    (...)
    ListNode *list;
    Node2*  prev;
    Node2*  next;
}


Есть список из этих узлов ListNode2
Код

class ListNode2
{
    (...)
    Node2* beg;
    Node2* end;
}


ссылка *pnode может указывать на любой элемент Node входящий в list любого узла Node2.
Такое можно будет сделать в C#???????????????????????????????????/

Автор: mes 3.11.2010, 10:59
Цитата(cymtu @  3.11.2010,  09:54 Найти цитируемый пост)
Вот вы тут все пишите переходи на С#.

переходить на шарп советуют , если Вы пишете под .Net..
 без последнего (или его аналога) шарп не дышит
smile

Автор: xvr 3.11.2010, 11:17
Цитата(cymtu @  3.11.2010,  10:54 Найти цитируемый пост)
Такое можно будет сделать в C#
Можно. Там все объекты фактически представлены указателями. 
Подробнее наверное надо спрашивать в ветке форума по .NET программингу


Автор: azesmcar 3.11.2010, 11:18
Цитата(cymtu @  3.11.2010,  10:54 Найти цитируемый пост)
ссылка *pnode может указывать на любой элемент Node входящий в list любого узла Node2.
Такое можно будет сделать в C#???????????????????????????????????/ 

Все там можно. Вопросы по деталям в соответствующей разделе.
Кстати зачем писать то, что давно уже написано?

Цитата(mes @  3.11.2010,  10:59 Найти цитируемый пост)
переходить на шарп советуют , если Вы пишете под .Net..

 smile 

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