如何向线程传递参数以及线程函数向回掉函数返回参数(不要使用全局变量)

auroralorigin 2018-03-06 05:08:48


在尝试写贪吃蛇,如图,我想传递direction这个参数给线程函数,同时也想线程返回时提供direction是否改变的信息,不想使用全局变量,不知如何入手。。求大神帮忙,感激不尽~~
...全文
468 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
may 2018-08-15
  • 打赏
  • 举报
回复
调用时:
HANDLE hThread = CreateThread(NULL, 0, MyThread, (LPVOID)direction, 0, NULL);

线程里:
DWORD WINAPI MyThread(LPVOID IpParameter)
{
int direction = (int)IpParameter;


注意你的direction类型与input匹配
自信男孩 2018-03-07
  • 打赏
  • 举报
回复
引用 2 楼 auroralorigin 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:] 将direction传递给线程,这个比较简单,通过线程体的参数可以得到。如果还要将线程修改了direction后及时通知另一个线程,建议用信号量。
将direction传递给线程,如何通过线程体的参数得到呢,可否具体一点呢?[/quote] 看你怎么用吧,将&direction传给线程,通过线程体的参数接口传给线程;然后再定义信号量,如果在子线程体里修改direction,则给主线程发信号。 在Linux下有对应的接口:pthread_cond_wait, pthread_cond_signal,在windows你可以查一下
赵4老师 2018-03-07
  • 打赏
  • 举报
回复
《Windows核心编程》
paschen 版主 2018-03-06
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx CreateThread第4个参数就是要传递给线程函数的参数,你可以把你的direction传入: CreateThread(NULL, 0, MyThread, direction, 0, 0) 你代码里把direction放到第5个参数了 此外,在线程函数中还要先把pParam强制转换成int类型再使用
zilaishuichina 2018-03-06
  • 打赏
  • 举报
回复
引用 4 楼 auroralorigin 的回复:
[quote=引用 3 楼 zilaishuichina 的回复:] DWORD WINAPI MyThread(PVOID pParam), 这个pParam就是传参用的
打扰一下,可以具体一点怎么把direction传给线程函数吗?[/quote] CreateThread(0, 0, MyThread, &direction, 0, 0) // lz 应该去搜一下CreateThread每一个参数的作用。。。我们这里传你想传递的那个变量的地址 然后 DWORD WINAPI MyThread(PVOID pParam) { int *direction = (int *)pParam; // 这pParam就是CreateThread里面传的第4个参数,上面我们传的是direction的地址,所以这里把pParam强转成int *,就拿到了direction的地址 //.... }
auroralorigin 2018-03-06
  • 打赏
  • 举报
回复
引用 3 楼 zilaishuichina 的回复:
DWORD WINAPI MyThread(PVOID pParam), 这个pParam就是传参用的
打扰一下,可以具体一点怎么把direction传给线程函数吗?
zilaishuichina 2018-03-06
  • 打赏
  • 举报
回复
DWORD WINAPI MyThread(PVOID pParam), 这个pParam就是传参用的
auroralorigin 2018-03-06
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
将direction传递给线程,这个比较简单,通过线程体的参数可以得到。如果还要将线程修改了direction后及时通知另一个线程,建议用信号量。
将direction传递给线程,如何通过线程体的参数得到呢,可否具体一点呢?
自信男孩 2018-03-06
  • 打赏
  • 举报
回复
将direction传递给线程,这个比较简单,通过线程体的参数可以得到。如果还要将线程修改了direction后及时通知另一个线程,建议用信号量。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧