- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我写了一些这样的测试代码,编译后运行良好...
void threadtest()
{
HANDLE hThrd;
DWORD threadId;
int i;
for (i = 0;i < 5;i++)
{
hThrd = CreateThread(
NULL,
0,
ThreadFunc,
(LPVOID)i,
0,
&threadId );
}
// more stuff
}
DWORD WINAPI ThreadFunc(LPVOID n)
{
// stuff
return 0;
}
然后我想修改代码,将 ThreadFunc 放入类中,然后声明这些类的数组。我认为代码应该是这样的:
class thread_type
{
public:
DWORD WINAPI ThreadFunc(LPVOID n)
{
// stuff
return 0;
}
};
void threadtest()
{
HANDLE hThrd;
DWORD threadId;
int i;
thread_type *slave;
slave = new thread_type[5];
for (i = 0;i < 5;i++)
{
hThrd = CreateThread(
NULL,
0,
slave[i].ThreadFunc,
(LPVOID)i,
0,
&threadId );
}
// more stuff
}
不幸的是,编译器提示 slave[i].ThreadFunc 行,我想我可能需要一些特殊的转换,但我尝试的所有涉及“::”和“&”的排列似乎都失败了(我对C++)。实际代码有一些额外的复杂性,为清楚起见我没有包括在内,但我认为它们是无关紧要的。
最佳答案
代码的第一个问题,测试类不是 thread_type 的后代。您需要以某种方式指定基类。其次,如果你传递的是函数指针,那不应该是 thiscall 类型。解决方案通常是这样的:
struct thread
{
virtual void
run() = 0;
static thread_func(void* param)
{
thread* pThread = (thread*)param;
thread->run();
}
}
struct worker : public thread
{
void
run()
{
(.. code for the thread...)
}
}
void threadtest()
{
HANDLE hThrd;
DWORD threadId;
int i;
thread *slave;
slave = new thread_type[5];
slave[0] = new worker;
slave[1] = new worker;
slave[2] = new worker;
slave[3] = new worker;
slave[4] = new worker;
for (i = 0;i < 5;i++)
{
hThrd = CreateThread(
NULL,
0,
&thread::thread_func,
(LPVOID)slave[i],
0,
&threadId );
}
// more stuff
}
请注意,这可能只是一个反射,我现在无法编译,因为我这里没有任何东西可以这样做,但逻辑应该是这样的。
关于c++ - LPTHREAD_START_ROUTINE/类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1477239/
我注意到了这一点 HandleWorker = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)this->WorkerThread, this, 0, &
我写了一些这样的测试代码,编译后运行良好... void threadtest() { HANDLE hThrd; DWORD threadId; int i; for (i = 0;
我似乎找不到 C 语言的 LPTHREAD_START_ROUTINE 的任何文档。 我找到了这个,但它适用于 .NET Framework 4.5 并且已弃用:http://msdn.microso
我已经声明了一个函数并作为 CreateThread() 函数的 3 个参数传递,但我试图将这个函数和相关的类分开,以使代码更有条理,但我收到以下错误: error: cannot convert '
我正在使用 C++ 代码库,其中包含如下几行: CreateThread(NULL, 0, MyThreadMethod, NULL, 0, NULL); 我想写入 MyThreadMethod 的值
我想创建一个进程,语法类似如下,只是我不想创建一个线程: hThread = CreateThread( NULL, // no security
警告:这是示例代码。 我需要定义这个 typedef 和这个定义才能使代码顺利编译。 我有以下代码,我需要知道 __WHAT_HERE1 和 __WHAT_HERE2 中应该包含什么内容: #
我是一名优秀的程序员,十分优秀!