gpt4 book ai didi

c++ - 将函数作为参数传递以简化线程创建

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:09 25 4
gpt4 key购买 nike

我正在尝试编写一小段代码,使使用 CreateThread() 看起来更简洁一些。我不能说我真的打算使用它,但我认为对于像我这样的新程序员来说,这将是一个有趣的小项目。这是我目前所拥有的:

#include <iostream>
#include <windows.h>
using namespace std;

void _noarg_thread_create( void(*f)() )
{
cout << "Thread created...\n" << endl;
Sleep(10);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)f, NULL, 0, NULL);
}

template <typename T>
void _arg_thread_create( void(*f)(T), T* parameter)
{
cout << "Thread created...\n" << endl;
Sleep(10);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)*f, parameter, 0, NULL);
}


void printnums(int x)
{
for(int i = x; i < 100; i++)
{
cout << i << endl;
}
}

void printnumsnoarg()
{
for(int i = 0; i < 100; i++)
{
cout << i << endl;
}
}


int main()
{
cin.get();
_noarg_thread_create( &printnumsnoarg );
cin.get();
int x = 14;
_arg_thread_create( &printnums, &x );
cin.get();
}

基本上,我有两个函数会为 CreateThread 调用两个不同的预设:一个在线程中需要参数时调用,另一个在线程中不需要参数时调用。我可以用 g++ 编译器 (cygwin) 编译它,它运行时没有任何错误。第一个线程被正确创建,并按预期打印出数字 0-99。然而,第二个线程没有打印出任何数字(使用这段代码,它应该打印出 14-99)。我的输出如下所示:

<start of output> 

$ ./a.exe

Thread created...

0
1
2
3
.
.
.
97
98
99


Thread Created...



<end of output>

知道为什么第二个线程不能正常工作吗?

最佳答案

您实际上似乎没有将指针传递给 printnums(int x) 函数。由于 x 在您的 main 函数中的存储位置将比 100 大很多,因此您的循环永远不会运行。

您应该尝试将 printnums 更改为:

void printnums(int *x)
{
for(int i = *x; i < 100; i++)
{
cout << i << endl;
}
}

我想一切都会按预期进行。

关于c++ - 将函数作为参数传递以简化线程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com