我正在尝试编写一小段代码,只是使用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>
为什么第二个线程无法正常工作?
答案 0 :(得分:1)
你实际上似乎想念你正在向你的printnums(int x)
函数传递一个指针。由于主函数中x
的存储位置将远大于100,因此循环永远不会运行。
您应该尝试将printnums
更改为:
void printnums(int *x)
{
for(int i = *x; i < 100; i++)
{
cout << i << endl;
}
}
我想一切都会按预期工作。