急问两个问题!!!谢谢~!!!!

wangsiyuanoo 2009-09-22 04:22:07
如何将一个变量int n作为函数的参数放到下面的两种情况中去

1.
SetTimer(...)函数可以加一个自定义参数int n么
然后在OnTimer中使用n.
可以实现么?
如何实现?

2.
HANDLE Client_Thread = NULL;
unsigned Client_ThreadID = 0;
Client_Thread = (HANDLE)_beginthreadex(NULL, 0, ClientThread, this, 0, &Client_ThreadID);
if ( NULL == Client_Thread )
break;
_beginthreadex(...)函数可以加一个自定义参数int n么
然后在ClientThread(...)中使用n
可以实现么?
如何实现?

前提是n不能设置为全局的!!!
必须通过传参,来实现全局变量的功能!
...全文
82 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allen_zhang 2009-09-23
  • 打赏
  • 举报
回复
不就是要传一个参数嘛?定义好的接口怎么可以改掉呢?不过可以使用其他的方式嘛,为什么一定要传递呢?
1、使用类变量或者其他的全局变量
2、创建线程的话,不是有一个传递进去的参数吗?那个参数只是一个指针而已,这个完全可以扩展的,不过传递进去的指针要注意其生命周期,最好用new在堆上面的,再在线程上释放掉。要不会出现楼上说的那种情况。

为什么不能使用全局变量?这是规则要求还是其他的?如果不是规则要求的话完全可以。
huziwu 2009-09-22
  • 打赏
  • 举报
回复
1.已经定好的接口是无再自定义的,除非你自己写个函数将你要调用的函数封装起来。


2.Client_Thread = (HANDLE)_beginthreadex(NULL, 0, ClientThread, (void *)n, 0, &Client_ThreadID);
如果n为局部变量,那么在线程中获得的值会无效,因为
beginthreadex是马上返回的,之后局部变量就会被系统清除

ClientThread(void *ch)
{
int n = ×((int×) ch); //此时ch可能指向一个无效的地址,

}
wltg2001 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangsiyuanoo 的回复:]
不过可以用它的定时器ID作为这个参数,变相的完成你的要求
======
请问这个如何实现啊?
[/Quote]
SetTimer的第二个参数是表示定时器ID,一般用于区分多个不同定时器的,如果你的程序中只一个定时器,这个参数就没有什么用了,刚好它的类型是整型的,你可以将你要传的值传给它,由它带给定时器处理函数
fishion 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangsiyuanoo 的回复:]
难道这两个函数都没有一个参数位置可以自定义的么?
[/Quote]
回答是没有的
第二个问题就直接加那个参数进去就行了
Client_Thread = (HANDLE)_beginthreadex(NULL, 0, ClientThread, (void *)n, 0, &Client_ThreadID);

ClientThread(void *ch)
{
int n = (int) ch;

}
oldn123 2009-09-22
  • 打赏
  • 举报
回复
1,settimer并不支持用户参数传递,但是ontimer中可以直接防问成员变量啊.

2,)_beginthreadex的第四个参数是用户自已传递的参数,你传了个this,那就在你这个this类里加个成员,int n,然后线程中通过this去取n就可以了
wangsiyuanoo 2009-09-22
  • 打赏
  • 举报
回复
不过可以用它的定时器ID作为这个参数,变相的完成你的要求
======
请问这个如何实现啊?
wangsiyuanoo 2009-09-22
  • 打赏
  • 举报
回复
难道这两个函数都没有一个参数位置可以自定义的么?
wltg2001 2009-09-22
  • 打赏
  • 举报
回复
1.
SetTimer(...)函数可以加一个自定义参数int n么
然后在OnTimer中使用n.
可以实现么?
如何实现?
=======
不能,这个函数是设置定时器的,不过可以用它的定时器ID作为这个参数,变相的完成你的要求
第二个可以,创建线程本身就可以传参数过去。
岁月小龙 2009-09-22
  • 打赏
  • 举报
回复
这是系统函数,怎么可以随便更改参数呢?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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