Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/14: Рейтинг темы: голосов - 14, средняя оценка - 5.00
12 / 12 / 5
Регистрация: 10.09.2009
Сообщений: 261

Не могу создать параллельный поток

11.12.2009, 16:55. Показов 2658. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Мне нужно запустить в парелельном потоке функцию void Test_Btsdk_PairDevice(BTDEVHDL dev_hdl).
Я тупо содрал с книжки пример, ну и естественно подставил свою функцию:
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        int x=0;
        DWORD dwThreadID;
        HANDLE hThread = CreateThread(NULL,0,Test_Btsdk_PairDevice,&x,0,&dwThreadID);
}
Но код не компилируется, и выдает ошибки:
[C++ Error] Unit1.cpp(526): E2034 Cannot convert 'void (*)(unsigned long)' to 'unsigned long (__stdcall *)(void *)'
[C++ Error] Unit1.cpp(526): E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'void (*)(unsigned long)')

Почему не компилируется, что мне нужно исправить?
И как мне передать в функцию параметр BTDEVHDL dev_hdl?Где этот параметр указать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2009, 16:55
Ответы с готовыми решениями:

Не могу создать второй поток. Где ошибка?
Всем доброг овремени суток. Знаю что "потасканная" тема. Но совсем сбился с толку. Помогите найти ошибку. Вроде все по книге делаю а...

параллельный поток
В Visual C++ используется функция AfxBeginThread() для паралельного патока, насколько я понял в Builder она не катит. Что посоветуете...

НЕ могу создать поток
#include <iostream> #include <conio.h> #include <stdio.h> #include <thread> using namespace std; #define N 8 void...

4
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
11.12.2009, 19:17
Hacker_, Тип вызываемой функции неправильный. Третий параметр. У тебя
void * Test_Btsdk_PairDevice(DWORD);
А должна быть
DWORD WINAPI Test_Btsdk_PairDevice( void * param);
2
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
05.01.2010, 19:14
Аналогичная проблема, по совету выше толком ничего не понял, к сожалению.

C++
1
thread[1] = CreateThread(NULL,0,threadPcd,NULL,0,threadId[1]);
вот на этом месте те же самые ошибки:
C++
1
2
[BCC32 Error] Unit2.cpp(86): E2034 Cannot convert 'unsigned long' to 'unsigned long (__stdcall *)(void *)'
[BCC32 Error] Unit2.cpp(86): E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'unsigned long')
Сама вызываемая ф-ия выглядит след. образом:
C++
1
2
3
4
5
6
7
HWND thread[3];
DWord threadId[3];
 
DWORD threadPcd()
{
...
}
Возможно, в параметрах ф-ии нужно указать тип какой-то? Помогите!
Вот полный листинг, на всякий случай:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
[SIZE="1"]wchar_t a[100];
String s;
int i;
HWND thread[3];
DWord threadId[3];
HWND event[3];
//---------------------------------------------------------------------------
DWORD threadPcd()
{
int j;
{
 while (i<99)
 {
  if (GetCurrentThreadId() == threadId[1])
   {
    WaitForSingleObject(event[1],INFINITE);
    j=0;
    do
     {
     a[i+j] = '1';
     j++;
     }
    while ((j>9) || ((i+j)>=99));
    i=i+j;
    ResetEvent(event[1]);
    SetEvent(event[2]);
   }
  else
  if (GetCurrentThreadId() == threadId[2])
  {
   WaitForSingleObject(event[2],INFINITE);
    j=0;
    do
    {
     a[i+j] = '2';
     j++;
    }
    while ((j>9) || ((i+j)>=99));
    i=i+j;
    ResetEvent(event[2]);
    SetEvent(event[3]);
  }
  else
  {
   WaitForSingleObject(event[3],INFINITE);
    j=0;
    do
    {
     a[i+j] = '3';
     j++;
    }
    while ((j>9) || ((i+j)>=99));
    i=i+j;
    ResetEvent(event[3]);
    SetEvent(event[1]);
   }
 }
}
 
//return 1;
}
void __fastcall TForm2::Button1Click(TObject *Sender)
{
 i=0;
 //{___________________________________________________________}
 event[1] = CreateEvent(NULL, 1, 1, "Event1");
 event[2] = CreateEvent(NULL, 1, 0, "Event2");
 event[3] = CreateEvent(NULL, 1, 0, "Event3");
 //{___________________________________________________________}
 thread[1] = CreateThread(NULL,0,threadPcd,NULL,0,threadId[1]);
 thread[2] = CreateThread(NULL,0,@threadPcd,NULL,0,threadId[2]);
 thread[3] = CreateThread(NULL,0,@threadPcd,NULL,0,threadId[3]);
 //{___________________________________________________________}
 WaitForMultipleObjects(3,@thread,true,INFINITE);
 //{___________________________________________________________}
 closeHandle(thread[1]);
 closeHandle(thread[2]);
 closeHandle(thread[3]);
 //{___________________________________________________________}
 closeHandle(event[1]);
 closeHandle(event[2]);
 closeHandle(event[3]);
 //{___________________________________________________________}
 ListBox1.Clear;
 for sch = 1 to 100 do
 ListBox1.Items.Add(IntToStr(sch)+') '+a[sch-1]);
}
//---------------------------------------------------------------------------
[/SIZE]
На Delphi эта же самая строка пробелм при компиляции не вызывала:
Delphi
1
thread[1]:=CreateThread(nil,0,@threadPcd,nil,0,threadId[1]);
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
05.01.2010, 19:26
Прототип функции должен выглядеть так :
C++
1
DWORD WINAPI threadPcd( void * param );
Добавлено через 7 минут
В качестве последнего параметра нужно передавать адрес двойного слова,которое получит threadID. Короче говоря, &threadId[1] пиши,иначе получишь access violation
1
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
05.01.2010, 19:36
Спасибо большое. Помогло =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2010, 19:36
Помогаю со студенческими работами здесь

Не могу создать файл в поток ofstream
Всех с наступившем НГ!) Не могу открыть/создать файл в поток. fstream somf; ...

Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции.
Совсем не понял эту тему. Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде...

Не могу создать поток ("Требуется имя метода")
Пытаюсь создать поток, но постоянно выскакивает ошибка &quot;Требуется имя метода&quot;. Чего я только не делал - ни устранить, ни понять...

Создать параллельный процесс
Добрый вечер В свой проект хочу вставить функцию которая определяет нажатие клавиш (комбинацию клавиш). В зависимости от нажатия будут...

Не могу создать поток( Нужно чтобы функция запускается в потоке и работала там пока не закроем в потоке)
хм.. не могу создать поток в c++ и направить туда. Нужно чтобы функция запускается в потоке и работала там пока не закроем в потоке.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru