- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不确定我是否以正确的方式解决这个问题,但我正在使用 C++ 和 Visual Studio 2013 中的成员函数和线程。
我发现的其他答案说我必须将我的成员函数转换为静态函数,这样我就可以创建该线程。我遇到的问题是我无法调用任何其他非静态成员函数。
这是我的代码的摘录:
//Start the thread for the receive function
receiveMessageHandle = (HANDLE)_beginthreadex(0, 0, &foo::receiveMessageThread, (void*)0, 0, 0);
return 0;
}
unsigned int __stdcall foo::receiveMessageThread(void *threadToStart)
{
foo::receiveMessages(); //Non-static member function!
return 0;
}
非静态成员函数 receiveMessageThread 也不能转换为静态成员变量,因为它使用私有(private)成员变量。
有什么想法吗?有没有更好的方法在这里开始讨论?
最佳答案
通常这是通过将“this”对象(即实例)作为参数传递给静态函数来解决的:
class foo
{
public:
void startTheThread()
{
//Start the thread for the receive function (note "this")
receiveMessageHandle =
_beginthreadex(0, 0, &foo::receiveMessageThread, this, 0, 0);
}
private:
void receiveMessages()
{
}
static unsigned int __stdcall receiveMessageThread(void *p_this)
{
foo* p_foo = static_cast<foo*>(p_this);
p_foo->receiveMessages(); // Non-static member function!
return 0;
}
unsigned int receiveMessageHandle;
};
// somewhere
foo* the_foo = ...
the_foo->startTheThread();
关于c++ - _beginthreadex 与成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27176241/
要定义我的头文件中的线程: class HttpClient { public: ... unsigned int __stdcall PerformLogin(void*);
下面的代码是我的整个测试程序。每次我按 ENTER 时,进程使用的 RAM 都会增加 4k(它会不断增加,不会停止;我在任务管理器中看到它)。怎么了? _beginthread 也会发生同样的事情。
如何创建静态成员函数的线程例程 class Blah { static void WINAPI Start(); }; // .. // ... // .... hThread = (HAND
我目前正在调试一个多线程应用程序,它运行时没有错误,直到某些函数被调用了大约 2000 次。之后应用程序停止响应,我可以追踪到 _beginthreadex 因内存不足错误而失败。 在 Process
是否可以向 beginthreadex 传递多个参数? 我知道我可以创建一个类或结构,但如果我有不相关的数据片段我不想合并到一个类或结构中怎么办? Boost 库似乎允许多个参数,但我该如何为标准 c
我正在尝试使用 _beginthreadex 进行一些基本的并行化,并按照我给出的示例传递参数,但它不起作用。 有什么想法吗? #include #include void MyThread(vo
我不确定我是否以正确的方式解决这个问题,但我正在使用 C++ 和 Visual Studio 2013 中的成员函数和线程。 我发现的其他答案说我必须将我的成员函数转换为静态函数,这样我就可以创建该线
我有点困惑为什么 _beginthreadex() 没有启动我的线程。基本上,我有一个线程: 编辑 #3 -- 添加了 while() 作为我代码的一部分,但我最初从未声明过,因此该线程必须始终运行,
我想将 HANDLE 和 HWND 变量传递给 _beginthreadex 函数,我不想将这些变量设置为全局变量。 这就是我试过的: int APIENTRY WinMain(HINSTANCE h
我用分析器检查了一个项目的源代码。我是 C++ 新手。 它告诉我应该使用 Use _beginthreadex/_endthreadex 函数而不是 CreateThread/ExitThread 函
我有一个丑陋的 C 代码(我是 Windows 下 C 的新手)不要评判我......我想让它成为多线程,它从我的网络服务器列表中读取并检查它们是否存在,因为牢度我需要它是多线程的。搜索了很多谷歌和
大家好,这是我的代码 #include "StdAfx.h" #include #include #include unsigned int __stdcall threadproc(void
我最近了解到 ::_beginthreadex() 总是优于 ::CreateThread(),所以我更改了所有使用 ::CreateThread 的调用()。 唯一的缺点是我不再在 Visual S
我正在尝试将项目从 VS2008 转换为 VS2013,我遇到的(众多)问题之一是: c:\program files (x86)\microsoft visual studio 12.0\vc\at
我有一堆 QWebViews 渲染到一个小部件上。有一点我开始收到错误 QThread::start: Failed to create thread (The access code is inva
所以我制作了一个函数来打印跨不同窗口分层的文本,我希望它在一个单独的线程中,这样我就可以运行一个计时器来显示文本,同时让用户保持打开状态以继续使用该程序。但是,当我编译时出现此错误: error C2
#include #include #include //#include "windowstate.cpp" //DWORD WINAPI MyThreadFunction( LPVOID l
我试图了解 CreateThread 和 _beginthreadex 之间的区别,以及为什么调用 DisableThreadLibraryCalls 只会阻止使用 安装的线程_beginthread
我对使用从 _beginthreadex() 返回的句柄不感兴趣。立即对其调用 CloseHandle() 是否安全? 我认为必须这样做以避免内存泄漏。 最佳答案 是的,您可以在决定不再需要该句柄后立
我正在尝试将一些代码移植到 64 位,但似乎 _beginthreadex 中的线程 address 标识符是 unsigned int这是 32 位的,我无法从函数传递/接收 64 位的 addre
我是一名优秀的程序员,十分优秀!