线程函数的Ansi C参数获取编译器错误
Ansi C parameter to the thread function get compiler error
我在 CreateThread 函数的参数参数中遇到错误:
错误 C2440:'function':无法从 'int (__cdecl *)(BIGVAR *)' 转换为 'LPTHREAD_START_ROUTINE'
对于每个线程,read/write 的另一个变量列表和所有其他变量都是只读的。
直接调用线程函数thread(bigvar[2]);工作正常。
我必须做什么才能为每个线程提供每个变量列表的指针?
#define NUM_THREADS 5
int thread(BIGVAR *bv);
typedef struct typBIGVAR
{
int var1;
int var2[30];
char var3];
...
// many other variables
} BIGVAR;
int main ( int argc, char *argv[] )
{
buffer = (char *) malloc(sizeof(BIGVAR) * NUM_THREADS);
Mem = buffer;
BIGVAR *bigvar[NUM_THREADS];
unsigned long ThreadId[NUM_THREADS];
int arrayThread[NUM_THREADS];
for ( t=0; t<NUM_THREADS; t++ )
{
bigvar[t] = (BIGVAR *) Mem;
Mem += sizeof(BIGVAR);
}
thread( bigvar[2] ); // this works fine
for ( t=0; t < NUM_THREADS; t++ )
{
bv = bigvar[t];
arrayThread[t] = CreateThread(NULL, 0, &thread, bigvar[t], 0, &ThreadId[t]);
if (arrayThread[t] == NULL)
{
printf("Create Thread %d get failed.\n",arrayThread[t]);
}
}
}
您的线程函数的类型不正确,无法传递给 CreateThread
。
函数 thread
的类型为 int (*)(BIGVAR *)
但 CreateThread
期望的函数指针类型为 DWORD WINAPI (*)(LPVOID lpParameter)
。这些类型不兼容,通过不兼容的函数指针类型调用函数会触发 undefined behavior.
将您的函数签名更改为:
int thread(void *bv);
并在函数内部将参数从 void *
转换为 BIGVAR *
。
我在 CreateThread 函数的参数参数中遇到错误: 错误 C2440:'function':无法从 'int (__cdecl *)(BIGVAR *)' 转换为 'LPTHREAD_START_ROUTINE' 对于每个线程,read/write 的另一个变量列表和所有其他变量都是只读的。 直接调用线程函数thread(bigvar[2]);工作正常。 我必须做什么才能为每个线程提供每个变量列表的指针?
#define NUM_THREADS 5
int thread(BIGVAR *bv);
typedef struct typBIGVAR
{
int var1;
int var2[30];
char var3];
...
// many other variables
} BIGVAR;
int main ( int argc, char *argv[] )
{
buffer = (char *) malloc(sizeof(BIGVAR) * NUM_THREADS);
Mem = buffer;
BIGVAR *bigvar[NUM_THREADS];
unsigned long ThreadId[NUM_THREADS];
int arrayThread[NUM_THREADS];
for ( t=0; t<NUM_THREADS; t++ )
{
bigvar[t] = (BIGVAR *) Mem;
Mem += sizeof(BIGVAR);
}
thread( bigvar[2] ); // this works fine
for ( t=0; t < NUM_THREADS; t++ )
{
bv = bigvar[t];
arrayThread[t] = CreateThread(NULL, 0, &thread, bigvar[t], 0, &ThreadId[t]);
if (arrayThread[t] == NULL)
{
printf("Create Thread %d get failed.\n",arrayThread[t]);
}
}
}
您的线程函数的类型不正确,无法传递给 CreateThread
。
函数 thread
的类型为 int (*)(BIGVAR *)
但 CreateThread
期望的函数指针类型为 DWORD WINAPI (*)(LPVOID lpParameter)
。这些类型不兼容,通过不兼容的函数指针类型调用函数会触发 undefined behavior.
将您的函数签名更改为:
int thread(void *bv);
并在函数内部将参数从 void *
转换为 BIGVAR *
。