向线程中的函数传入参数的注意事项

1. 当函数的形参类型为 string, 而传入的参数类型为 char[] 时, 需要在线程函数中转型, 如此可以避免空悬指针。如:

void f(int, std::string const&);

void oops(int some_parm)
{
    char buffer[100];
    sprintf(buffer, "%i", some_parm);
    //std::thread(f, 3, buffer)      //not do this
    std::thread(f, 3, string(buffer)) //instead of
}

2. 当线程函数的形参为引用时, 不可以直接传入参数, 而应明确转为引用, 如:

void find_by_idx(int&);

void opps_again()
{
    int idx = 6;
    //std::thread t(find_by_idx, idx);        //damn no
    std::thread t(find_by_idx, std::ref(idx)); //damn good
}

3. 成员函数也可以作为线程函数
如:

class X
{
public:
    void do_something(Type parm);
};

X my_x;
std:thread(&X::do_something, my_x; the_parm);
时间: 2024-10-17 17:08:39

向线程中的函数传入参数的注意事项的相关文章

javascript中所有函数的参数都是按值传递的

[javascript中所有函数的参数都是按值传递的] 参考:http://www.jb51.net/article/89297.htm

Delphi中StrToDateTime函数TFormatSettings参数的使用

http://blog.csdn.net/arbin_he/article/details/7415300 Delphi中StrToDateTime函数TFormatSettings参数的使用 分类: Delphi2012-03-31 13:15 12267人阅读 评论(6) 收藏 举报 delphistring测试user [delphi] view plaincopy var FSetting : TFormatSettings; DateTime1: tDateTime; begin FS

[python]关于函数传入参数

在传入参数时有两个特殊参数,*args,**kwargs,功能如下: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------' if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1

main函数传入参数

最近几天在写一个模仿windows自带的ping程序,也从网上找过一些源码,但大都需要向主函数main中传入参数,这里简单总结一下向主函数中传参的方法. 方法一:项目->属性->调试->命令行参数输入参数 这个方法比较适合调程序时使用 方法二:运行->cmd->转到程序所在路径->程序名.exe 参数->回车 版权声明:本文为博主原创文章,未经博主允许不得转载.

如果给JQ的ajax方法中的success()传入参数?

当时在使用JQuery提供的Ajax技术的时候,我有个需求,就是要给它请求成功后调用的success()方法传入参数: 所以,我就直接这样子写了: <script> function getTypeList(name){ $.ajax({ url : '<c:url value="admin/type_loadTypeList.action"/>', type : 'get', contentType : "text/html;charset=utf-

react中元素事件传入参数写法

react中的元素绑定事件并且传入参数,不能使用箭头函数,否则传参会立即调用 错误写法:页面刷新会立即调用 <li key={index+item} onClick={this.deleteItem(index)} > {item} </li> deleteItem = (index) => { console.log(index) } 正确写法:click的时候才会调用 <li key={index+item} onClick={this.deleteItem.bin

当函数传入参数是引用类型的几种情况和现象。

1 function hehe(o,oo){ 2 o = 'xoxo' 3 oo.ins.name = 'zhangmingzhi;' 4 } 5 var obj = { 6 ins:{ 7 8 } 9 } 10 hehe(obj.ins,obj); 11 console.log(obj); 情况1,传入参数为oo,为一个引用类型的时候,参数修改的值会体现在外部 即obj中. 情况2,传入参数为o,为一个引用类型,参数修改的值在外部obj.ins体现不出来 根据情况2的猜想:可能是obj在栈上的

C 中 main 函数的参数

      看到不同的人写出的 C 或者 C++ 程序时,可能会出现不一样的 main 函数的定义,下面的几种定义方式都是对的: int main(void) int main(int argc) int main(int argc, /*const*/ char** argv) int main(int argc, /*const*/ char** argv, /*const*/ char** enviorn)       这几种方式中,第三种方式是最常用的.那么,这些参数代表着什么呢?下面,

C++中的函数及参数介绍

函数的概念 函数是一组一起执行一个任务的语句.每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 你可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由你来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的. 函数声明告诉编译器函数的名称.返回类型和参数.函数定义提供了函数的实际主体. C++ 标准库提供了大量的程序可以调用的内置函数.例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内