2011-04-13 93 views
4

在Windows的C++,下面创建一个线程:Windows的C++线程参数传递

CreateThread(NULL, NULL, function, parameter, NULL, &threadID); 

这将在一个新的线程运行的“功能”,并将它传递“参数”作为一个void *或LPVOID。

假设我想两个参数传递到“功能”,有没有这样做它除了创建一个包含两个变量的数据结构,然后浇铸的数据结构为LPVOID的更好看呢?

回答

11

不,这是唯一的方法。只要创建与2名数据成员结构和传递为void *

+0

你确定吗?这样做似乎很难看。 – rossb83 2011-04-13 18:49:43

+0

将'void *'作为参数后面的想法是,你可以做到这一点,而系统不会阻碍。你的代码知道双方的参数是什么,但系统不需要。 – ssube 2011-04-13 18:53:48

+0

@ross这是什么丑陋的?记住你被限制提供一个C接口。你对这个问题有什么更好的解决方法? – 2011-04-13 18:54:08

0

这是标准的方式来传递参数给线程但是你的新线程卡恩访问过程中的任何内存,使东西是很难通过或只要您提供适当的同步控制,就可以将大量数据作为共享资源进行访问。

0

我认为有一个更好的方法,我一直在我的嵌入式代码中使用它。它实际上是出于将成员方法传递给与CreateThread()非常相似的函数的愿望。理想的原因是因为该类已经有成员数据(有合适的​​setter),所有参数都是线程代码所需要的。 I wrote up a more detailed explanation你可以参考,如果你有兴趣。在写作中,你看到OSTaskCreate(),只是在心理上替代CreateMethod()。

+0

2016年12月13日,链接似乎中断。你能修好吗? @Tod – Andiana 2016-12-13 06:57:00

+1

我会看看我能否得到我写的内容。这个wiki属于NetBurner,它们仍然在商业中,并且正在发展壮大,所以我不确定他们为什么要把Wiki放下。自从我加入Pluralsight后,我还没有完成嵌入式工作。我在他们的论坛上问过,在员工看到之前可能需要一段时间。 – Tod 2016-12-17 03:18:40

+0

@Andiana Netburner在假期中温和地复活了维基,以便我能够获得文章。我将感兴趣的页面复制到维基页面,并更新链接以指向该页面上应该感兴趣的位置。 – Tod 2016-12-22 01:11:19