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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2014, 12:40   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Две проблемы - потоки и функция GetTypeDrive

Извините за много текста, но спойлера к моему сожалению здесь нет.

Проблема первая

Как создать поток в приложении Windows Forms ?
Есть три функции
CreateThread, _beginthread, и _beginthreadex.

Вызов этих функций происходит примерно следующим образом ...
Для CreateThread:
Код:
/* ... */

DWORD dwThread;
HANDLE hThread=CreateThread(NULL,0,thread,NULL,0,&dwThread);

/* ... */

void thread()
{
	/* всякоразное */
}

/* ... */
Для _beginthread:
Код:
/* ... */

_beginthread(thread,0,NULL);

/* ... */

void thread(void *pParams)
{
	/* всякоразное */
}

/* ... */
Для _beginthreadex аналогично _beginthread, только параметров больше.

В консольном приложении (правда под C++) проблем никаких, а вот для Windows Forms есть ошибки (параметр lpStartAdress во всех функциях), причём для всех функций одни и те же.

Первый вариант ошибки
" Шаблон::Form1::thread: в вызове функции отсутствует список аргументов; используйте "&Шаблон::Form1::thread" для создания указателя на член "

Второй вариант ошибки
При подстановке амперсанда (&) перед "thread" следующая ошибка:
" &: недопустимая операция с выражением привязанной функции-члена "

Третий вариант
При полной записи "так как сказал компилятор" (&Шаблон::Form1::thread): аналогичная ошибка, как в предыдущем варианте;

Четвёртый вариант
При полной записи без амперсанда (Шаблон::Form1::thread): ошибка, аналогичная второй.

Это в данный момент времни моя самая больная и большая проблема. Чё мне делать ? Я читал многА литературы, и самый неприятный вариант - у .NET есть "свои функции управления потоками", и прилегающие простыни кода (без описания, что куда вставлять).


Проблема вторая
Функция GetTypeDrive.
Эта функция работает правильно, но только один раз - первый. То есть, у меня в системе 3 логических жёстких дисков, и для каждого из них функция возвращает правильный результат по одному разу.
То есть, для диска C:\ результат 3, для диска D:\ результат 3 и для диска E:\ результат 3.
Если пойти по второму кругу - то результат функции будет 1 (для любого диска).

Что мне делать с этой проблемой ?


Ну и в итоге, для чего мне всё это нужно:
Обновление информации о жёстких дисках, и всё это в потоке (см. первую проблему).
Я конечно понимаю, что тип диска можно получить один раз, а потом обновлять информацию о памяти, файловой системе и т.п., но это сильно усложнит арифметику, так как выводимую информацию придётся хранить отдельно, причём в динамической матрице char (ибо студия не позволяет создавать массив String ^).
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки. Закрываются все потоки при ошибке в одном. Son Общие вопросы Delphi 11 01.11.2013 09:32
Как совместить две трудовые деятельности - две работы? Alar Свободное общение 19 12.10.2012 10:40
две не понятные проблемы. mbstar Компьютерное железо 6 10.05.2011 16:52
Проблемы с циклом - Потоки ArniLand Общие вопросы C/C++ 1 03.06.2010 19:31
С паскалем как и у многих проблемы,прошу помощи. Две задачи: интегральная и графическая. Loyal Помощь студентам 3 27.09.2007 09:46