听起来您需要创建一个任务队列。即创建工作线程来完成一些任务,然后离开。如果是这种情况,则在此处描述该方法。
但你真正的问题是关于在线程之间来回传递数据。函数CreateThread包含一个参数 ,LPVOID lpParameter
它就是为了实现这种能力而包含的。它是一个 void *,因此它将接受任何变量类型,包括指向数组的指针、指向结构的指针等。这允许您根据需要来回传递尽可能多或尽可能少的数据。
下面的代码片段传递一个指向数据数组的指针。这将是你感兴趣的部分
这是创建线程的部分
hThreadArray[i] = CreateThread(
NULL, // default security attributes
0, // use default stack size
MyThreadFunction, // thread function name
pDataArray[i], // argument to thread function
0, // use default creation flags
&dwThreadIdArray[i]); // returns the thread identifier
寻找MyThreadFunction
将接收和传递数据的工作函数:
这是完整的可构建代码
对于 posix:
pthread_create()
还包含可传递的数据:
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg);
invoid *arg
参数可以使用最后一个参数传递给线程,就像在 windows 版本中一样。你想要做的还有一个函数pthread_join()
,原型化:
int pthread_join(pthread_t th, void **thread_return);
这个函数在被调用的线程结束时用作处理程序(第一个参数线程句柄)。当线程退出时,pthread_join 中的最后一个参数可以接收数据。这些数据可能对您声明的目的有用。