关于线程的一个问题

benbshmily 2010-03-08 02:30:51
我用pthread_create创建多个线程,我想在每个线程函数执行完的时候(在return之前)或者说在每个线程退出之前,去执行我特定的一些代码。请问该如果去做呢?
线程有关于这个回调吗?就是在某个线程结束之前,去回调我注册的函数之后,线程才退出。
谢谢。
...全文
102 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_S_D_N 2010-03-08
  • 打赏
  • 举报
回复
用Linux中pthread_cleanup_push()和pthread_cleanup_pop()是否会导致所有线程都执行,而不是指定线程?

引用 16 楼 freezezdj 的回复:
其实Linux已经给你做好了。
不用你再自己想思路了。

呵呵。自己做当然也行。
冻结 2010-03-08
  • 打赏
  • 举报
回复
其实Linux已经给你做好了。
不用你再自己想思路了。

呵呵。自己做当然也行。
benbshmily 2010-03-08
  • 打赏
  • 举报
回复
引用 12 楼 freezezdj 的回复:
你的api是Linux 下的。
怎么他给你Win32的代码,
你还很高兴。

你到底是什么平台下开发?

我要的不是代码,而是思路。
谢谢
M_S_D_N 2010-03-08
  • 打赏
  • 举报
回复
Linux下创建线程的过程应该类似Windows吧。

引用 12 楼 freezezdj 的回复:
你的api是Linux 下的。
怎么他给你Win32的代码,
你还很高兴。

你到底是什么平台下开发?
r11222 2010-03-08
  • 打赏
  • 举报
回复
mark!!学习有用
冻结 2010-03-08
  • 打赏
  • 举报
回复
你的api是Linux 下的。
怎么他给你Win32的代码,
你还很高兴。

你到底是什么平台下开发?
benbshmily 2010-03-08
  • 打赏
  • 举报
回复
引用 9 楼 m_s_d_n 的回复:
可以这么写
C/C++ code
CreateThreadXX(FUNC* pCustomThreadProc)
{
_beginthreadex(NULL,0, TrueThreadProc, pCustomThreadProc,0, NULL) ;
}

unsignedint WINAPI TrueThreadProc(LPVOID p)
{
((Func*)p)() ;

ThreadProcBeforeReturn() ;return0 ;
}引用 8 楼 benbshmily 的回复:
引用 7 楼 xianzq888 的回复:
引用 5 楼 jiangxc2004 的回复:
退出前直接显式调用这个函数不行吗?

我顶你,居然都知道退出为什么要回调呢?直接调不就OK了
因为我只负责创建线程,我提供一个线程创建的接口给用户,用户把线程函数入口地址传给我,我去创建线程。我总不能还给用户说,"你在写线程函数的时候在return之前必须去调用我的**函数吧。"。我是想问有没有一种机制,当在线程退出的时候自动去调用另一个函数。而不需要在线程函数里面去显示调用。


感谢,正是我想要的结果。
M_S_D_N 2010-03-08
  • 打赏
  • 举报
回复
加点注释

// 你提供的创建线程接口
CustomCreateThread(FUNC * pCustomThreadProc)
{
_beginthreadex(NULL, 0, TrueThreadProc, pCustomThreadProc, 0, NULL) ;
}

unsigned int WINAPI TrueThreadProc(LPVOID p)
{
((Func*)p)() ;

DoSomethingBeforeReturn() ; // 在线程结束之前要做的事

return 0 ;
}


M_S_D_N 2010-03-08
  • 打赏
  • 举报
回复
可以这么写

CreateThreadXX(FUNC * pCustomThreadProc)
{
_beginthreadex(NULL, 0, TrueThreadProc, pCustomThreadProc, 0, NULL) ;
}

unsigned int WINAPI TrueThreadProc(LPVOID p)
{
((Func*)p)() ;

ThreadProcBeforeReturn() ;

return 0 ;
}
引用 8 楼 benbshmily 的回复:
引用 7 楼 xianzq888 的回复:
引用 5 楼 jiangxc2004 的回复:
退出前直接显式调用这个函数不行吗?

我顶你,居然都知道退出为什么要回调呢?直接调不就OK了
因为我只负责创建线程,我提供一个线程创建的接口给用户,用户把线程函数入口地址传给我,我去创建线程。我总不能还给用户说,"你在写线程函数的时候在return之前必须去调用我的**函数吧。"。我是想问有没有一种机制,当在线程退出的时候自动去调用另一个函数。而不需要在线程函数里面去显示调用。
benbshmily 2010-03-08
  • 打赏
  • 举报
回复
引用 7 楼 xianzq888 的回复:
引用 5 楼 jiangxc2004 的回复:
退出前直接显式调用这个函数不行吗?

我顶你,居然都知道退出为什么要回调呢?直接调不就OK了

因为我只负责创建线程,我提供一个线程创建的接口给用户,用户把线程函数入口地址传给我,我去创建线程。我总不能还给用户说,"你在写线程函数的时候在return之前必须去调用我的**函数吧。"。我是想问有没有一种机制,当在线程退出的时候自动去调用另一个函数。而不需要在线程函数里面去显示调用。
  • 打赏
  • 举报
回复
引用 5 楼 jiangxc2004 的回复:
退出前直接显式调用这个函数不行吗?


我顶你,居然都知道退出为什么要回调呢?直接调不就OK了
benbshmily 2010-03-08
  • 打赏
  • 举报
回复
to M_S_D_N and jiangxc2004
行倒是行,但是一旦创建线程多了之后这个就未免有点麻烦和冗余,线程退出时每次调用的是一样的。而且还有另外的一个主要原因。一时也不好说清楚。
但是我是想咨询一下有没有好的方法做这个事情。
to freezezdj

好的,我看看先
jiangxc2004 2010-03-08
  • 打赏
  • 举报
回复
退出前直接显式调用这个函数不行吗?
冻结 2010-03-08
  • 打赏
  • 举报
回复
两个函数,你去看看。
pthread_cleanup_push().
pthread_cleanup_pop().
冻结 2010-03-08
  • 打赏
  • 举报
回复
两个函数,你去看看。
pthread_cleanup_push().
pthread_cleanup_pop().
冻结 2010-03-08
  • 打赏
  • 举报
回复
两个函数,你去看看。
pthread_cleanup_push().
pthread_cleanup_pop().
M_S_D_N 2010-03-08
  • 打赏
  • 举报
回复
在线程函数return之前调用那些函数不行吗?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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