Работа с потоками, передача данных между потоками

207
17 марта 2018, 17:56

Здравствуйте, как правильно передавать параметр в функцию потока. То есть как передать "а" в метод Func? Я читал что вроде бы 4 параметр метода CreateThread и есть полем для параметра.

int main(){
DWORD dID;
HANDLE h;
int a;
h = CreateThread(NULL,0,Func,0,0,&dID);
}
DWORD WINAPI Func(LPVOID){
.......
}
Answer 1

Да, один из параметров. Передавайте указатель, а не значение:

#include <windows.h>
#include <iostream>
DWORD WINAPI Func(LPVOID param);
int main()
{
    int * param = new int(10);
    CreateThread( 
            NULL,       // default security attributes
            0,          // use default stack size  
            Func,       // thread function name
            param,      // argument to thread function 
            0,          // use default creation flags 
            NULL);
    ... 
}
DWORD WINAPI Func(LPVOID param)
{
    int * number = static_cast<int*>(param);
    std::cout << *number << std::endl;
    delete number;
    return 0; 
}
READ ALSO
C++ Неявно вызывается лишний конструктор. Классы как поля другого класса

C++ Неявно вызывается лишний конструктор. Классы как поля другого класса

Есть простенькая программа на с++Есть три класса, один содержит приватными полями 2 других

223
Datagram сокет с поддержкой overlapped I/O operations

Datagram сокет с поддержкой overlapped I/O operations

При создании сокета можно указать WSA_FLAG_OVERLAPPED, что это означает? В MSDN достаточно скудная информацияЧто это вообще за технология overlapped I/O operations...

209
Удаляется DLL из SysWOW64 после перезагрузки

Удаляется DLL из SysWOW64 после перезагрузки

Пишу инсталятор на InnoSetup для своей программы

194
добавить картинку в textView

добавить картинку в textView

Доброго времени суток! Как можно добавить картинку в текст, что бы было такое

175