Passing parameters to _beginthreadex
I'm attempting to do some basic parallelisation using _beginthreadex, and passing parameters as per an example I was given, but it won't work.
Any ideas?
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
std::cout << "Hello World!";
}
int main()
{
_beginthreadex(NULL, 0, MyThread, NULL, 0, NULL);
while(true);
}
EDIT:
Why won't passing NULL as an argument work? (Since the function takes no arguments anyway?)
Passing NULL as an arguments list worked fine with _beginthread.
c++ windows multithreading
add a comment |
I'm attempting to do some basic parallelisation using _beginthreadex, and passing parameters as per an example I was given, but it won't work.
Any ideas?
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
std::cout << "Hello World!";
}
int main()
{
_beginthreadex(NULL, 0, MyThread, NULL, 0, NULL);
while(true);
}
EDIT:
Why won't passing NULL as an argument work? (Since the function takes no arguments anyway?)
Passing NULL as an arguments list worked fine with _beginthread.
c++ windows multithreading
what does it do? How doesn't it work?
– forsvarir
May 11 '11 at 17:18
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__cdecl *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:28
apparently your function needs to return an integer. See my edited post.
– Constantinius
May 11 '11 at 17:35
add a comment |
I'm attempting to do some basic parallelisation using _beginthreadex, and passing parameters as per an example I was given, but it won't work.
Any ideas?
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
std::cout << "Hello World!";
}
int main()
{
_beginthreadex(NULL, 0, MyThread, NULL, 0, NULL);
while(true);
}
EDIT:
Why won't passing NULL as an argument work? (Since the function takes no arguments anyway?)
Passing NULL as an arguments list worked fine with _beginthread.
c++ windows multithreading
I'm attempting to do some basic parallelisation using _beginthreadex, and passing parameters as per an example I was given, but it won't work.
Any ideas?
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
std::cout << "Hello World!";
}
int main()
{
_beginthreadex(NULL, 0, MyThread, NULL, 0, NULL);
while(true);
}
EDIT:
Why won't passing NULL as an argument work? (Since the function takes no arguments anyway?)
Passing NULL as an arguments list worked fine with _beginthread.
c++ windows multithreading
c++ windows multithreading
edited May 11 '11 at 17:24
Eilidh
asked May 11 '11 at 17:16
EilidhEilidh
66331638
66331638
what does it do? How doesn't it work?
– forsvarir
May 11 '11 at 17:18
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__cdecl *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:28
apparently your function needs to return an integer. See my edited post.
– Constantinius
May 11 '11 at 17:35
add a comment |
what does it do? How doesn't it work?
– forsvarir
May 11 '11 at 17:18
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__cdecl *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:28
apparently your function needs to return an integer. See my edited post.
– Constantinius
May 11 '11 at 17:35
what does it do? How doesn't it work?
– forsvarir
May 11 '11 at 17:18
what does it do? How doesn't it work?
– forsvarir
May 11 '11 at 17:18
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__cdecl *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:28
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__cdecl *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:28
apparently your function needs to return an integer. See my edited post.
– Constantinius
May 11 '11 at 17:35
apparently your function needs to return an integer. See my edited post.
– Constantinius
May 11 '11 at 17:35
add a comment |
5 Answers
5
active
oldest
votes
Your code has two errors in it, neither of which are related to the parameter to the thread function --- NULL
is fine for that, as you surmised.
The problems are in the signature of the thread function, and the error you are getting points this out. Firstly, it must be a __stdcall
function, and secondly it must return an unsigned int
. Your function is __cdecl
and returns void
.
unsigned __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
should fix the problem for you.
add a comment |
obviously in your code you are not passing any parameter. To pass a variable you have to do the following (for example):
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
int x = static_cast<int*>(data);
std::cout << "Hello World! " << x;
}
int main()
{
int x = 10;
_beginthreadex(NULL, 0, MyThread, &x, 0, NULL);
while(true);
}
UPDATE: Since you posted the compilation problem later:
apparently your thread function needs to return an integer:
int MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
|
show 2 more comments
You pass your data through the fourth parameter. This passes a pointer to i
:
unsigned __stdcall thread(void *arg)
{
int *iptr = (int*)arg;
...
}
int i;
_beginthreadex(0, 0, thread, &i, 0, 0);
Note that the thread function signature I used here is different than what you use: I return an unsigned
and use the __stdcall
calling convention -- this is the signature _beginthreadex expects.
Depending on what you're trying to do, the new Concurrency Runtime features in VC++ might be simpler to use than explicitly managing your own threads.
Edit in response to question edit:
You can pass any valid void pointer, including NULL. If you do that, you can even leave out the parameter's name since you're not using it:
unsigned __stdcall thread(void*)
{
...
}
_beginthreadex(0, 0, thread, 0, 0, 0);
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
Yes, I left that out for brevity. You also of course shouldn't try to call_beginthreadex
from outside of a function!
– Cory Nelson
May 11 '11 at 17:45
add a comment |
The argument to _beginthreadex must be a function with the __stdcall
calling convention. Your function has __cdecl
. A simple insertion of __stdcall
at the correct spot should solve the problem.
void __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
}
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
add a comment |
The fourth parameter in _beginthreadex(NULL, 0, MyThread, NULL, 0, NULL) are arguments to the function MyThread
Right now you are passing NULL to it so void* data
must be getting a NULL pointer
struct X
{
int a;
int b;
};
X* x = (X*)malloc(sizeof(X));
x->a = 5;
x->b = 6;
_beginthreadex(NULL, 0, MyThread, NULL, x, NULL);
The above code will pass pointer x
to the function MyThread()
.
Do take care of X, as it better should be allocated by malloc or new. Do not create it on stack until you use a thread join
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f5968076%2fpassing-parameters-to-beginthreadex%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
Your code has two errors in it, neither of which are related to the parameter to the thread function --- NULL
is fine for that, as you surmised.
The problems are in the signature of the thread function, and the error you are getting points this out. Firstly, it must be a __stdcall
function, and secondly it must return an unsigned int
. Your function is __cdecl
and returns void
.
unsigned __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
should fix the problem for you.
add a comment |
Your code has two errors in it, neither of which are related to the parameter to the thread function --- NULL
is fine for that, as you surmised.
The problems are in the signature of the thread function, and the error you are getting points this out. Firstly, it must be a __stdcall
function, and secondly it must return an unsigned int
. Your function is __cdecl
and returns void
.
unsigned __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
should fix the problem for you.
add a comment |
Your code has two errors in it, neither of which are related to the parameter to the thread function --- NULL
is fine for that, as you surmised.
The problems are in the signature of the thread function, and the error you are getting points this out. Firstly, it must be a __stdcall
function, and secondly it must return an unsigned int
. Your function is __cdecl
and returns void
.
unsigned __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
should fix the problem for you.
Your code has two errors in it, neither of which are related to the parameter to the thread function --- NULL
is fine for that, as you surmised.
The problems are in the signature of the thread function, and the error you are getting points this out. Firstly, it must be a __stdcall
function, and secondly it must return an unsigned int
. Your function is __cdecl
and returns void
.
unsigned __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
should fix the problem for you.
answered May 11 '11 at 21:48
Anthony WilliamsAnthony Williams
52k8102139
52k8102139
add a comment |
add a comment |
obviously in your code you are not passing any parameter. To pass a variable you have to do the following (for example):
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
int x = static_cast<int*>(data);
std::cout << "Hello World! " << x;
}
int main()
{
int x = 10;
_beginthreadex(NULL, 0, MyThread, &x, 0, NULL);
while(true);
}
UPDATE: Since you posted the compilation problem later:
apparently your thread function needs to return an integer:
int MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
|
show 2 more comments
obviously in your code you are not passing any parameter. To pass a variable you have to do the following (for example):
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
int x = static_cast<int*>(data);
std::cout << "Hello World! " << x;
}
int main()
{
int x = 10;
_beginthreadex(NULL, 0, MyThread, &x, 0, NULL);
while(true);
}
UPDATE: Since you posted the compilation problem later:
apparently your thread function needs to return an integer:
int MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
|
show 2 more comments
obviously in your code you are not passing any parameter. To pass a variable you have to do the following (for example):
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
int x = static_cast<int*>(data);
std::cout << "Hello World! " << x;
}
int main()
{
int x = 10;
_beginthreadex(NULL, 0, MyThread, &x, 0, NULL);
while(true);
}
UPDATE: Since you posted the compilation problem later:
apparently your thread function needs to return an integer:
int MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
obviously in your code you are not passing any parameter. To pass a variable you have to do the following (for example):
#include <iostream>
#include <process.h>
void MyThread(void *data)
{
int x = static_cast<int*>(data);
std::cout << "Hello World! " << x;
}
int main()
{
int x = 10;
_beginthreadex(NULL, 0, MyThread, &x, 0, NULL);
while(true);
}
UPDATE: Since you posted the compilation problem later:
apparently your thread function needs to return an integer:
int MyThread(void *data)
{
std::cout << "Hello World!";
return 0;
}
edited May 11 '11 at 17:36
answered May 11 '11 at 17:20
ConstantiniusConstantinius
24k65279
24k65279
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
|
show 2 more comments
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
But no variable needs to be passed since MyThread accepts no arguments?
– Eilidh
May 11 '11 at 17:20
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
It worked with NULL as the arguments list in _beginthread.
– Eilidh
May 11 '11 at 17:21
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
A it does have an argument list a void* and B yes because NULL is a valid void * value.
– rerun
May 11 '11 at 17:23
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
So NULL should be acceptable?
– Eilidh
May 11 '11 at 17:24
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
of course, the code you wrote is acceptable and propably compilable. But I thought you wanted to pass a parameter, or didn't you?
– Constantinius
May 11 '11 at 17:33
|
show 2 more comments
You pass your data through the fourth parameter. This passes a pointer to i
:
unsigned __stdcall thread(void *arg)
{
int *iptr = (int*)arg;
...
}
int i;
_beginthreadex(0, 0, thread, &i, 0, 0);
Note that the thread function signature I used here is different than what you use: I return an unsigned
and use the __stdcall
calling convention -- this is the signature _beginthreadex expects.
Depending on what you're trying to do, the new Concurrency Runtime features in VC++ might be simpler to use than explicitly managing your own threads.
Edit in response to question edit:
You can pass any valid void pointer, including NULL. If you do that, you can even leave out the parameter's name since you're not using it:
unsigned __stdcall thread(void*)
{
...
}
_beginthreadex(0, 0, thread, 0, 0, 0);
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
Yes, I left that out for brevity. You also of course shouldn't try to call_beginthreadex
from outside of a function!
– Cory Nelson
May 11 '11 at 17:45
add a comment |
You pass your data through the fourth parameter. This passes a pointer to i
:
unsigned __stdcall thread(void *arg)
{
int *iptr = (int*)arg;
...
}
int i;
_beginthreadex(0, 0, thread, &i, 0, 0);
Note that the thread function signature I used here is different than what you use: I return an unsigned
and use the __stdcall
calling convention -- this is the signature _beginthreadex expects.
Depending on what you're trying to do, the new Concurrency Runtime features in VC++ might be simpler to use than explicitly managing your own threads.
Edit in response to question edit:
You can pass any valid void pointer, including NULL. If you do that, you can even leave out the parameter's name since you're not using it:
unsigned __stdcall thread(void*)
{
...
}
_beginthreadex(0, 0, thread, 0, 0, 0);
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
Yes, I left that out for brevity. You also of course shouldn't try to call_beginthreadex
from outside of a function!
– Cory Nelson
May 11 '11 at 17:45
add a comment |
You pass your data through the fourth parameter. This passes a pointer to i
:
unsigned __stdcall thread(void *arg)
{
int *iptr = (int*)arg;
...
}
int i;
_beginthreadex(0, 0, thread, &i, 0, 0);
Note that the thread function signature I used here is different than what you use: I return an unsigned
and use the __stdcall
calling convention -- this is the signature _beginthreadex expects.
Depending on what you're trying to do, the new Concurrency Runtime features in VC++ might be simpler to use than explicitly managing your own threads.
Edit in response to question edit:
You can pass any valid void pointer, including NULL. If you do that, you can even leave out the parameter's name since you're not using it:
unsigned __stdcall thread(void*)
{
...
}
_beginthreadex(0, 0, thread, 0, 0, 0);
You pass your data through the fourth parameter. This passes a pointer to i
:
unsigned __stdcall thread(void *arg)
{
int *iptr = (int*)arg;
...
}
int i;
_beginthreadex(0, 0, thread, &i, 0, 0);
Note that the thread function signature I used here is different than what you use: I return an unsigned
and use the __stdcall
calling convention -- this is the signature _beginthreadex expects.
Depending on what you're trying to do, the new Concurrency Runtime features in VC++ might be simpler to use than explicitly managing your own threads.
Edit in response to question edit:
You can pass any valid void pointer, including NULL. If you do that, you can even leave out the parameter's name since you're not using it:
unsigned __stdcall thread(void*)
{
...
}
_beginthreadex(0, 0, thread, 0, 0, 0);
edited May 11 '11 at 17:36
answered May 11 '11 at 17:21
Cory NelsonCory Nelson
23.1k25284
23.1k25284
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
Yes, I left that out for brevity. You also of course shouldn't try to call_beginthreadex
from outside of a function!
– Cory Nelson
May 11 '11 at 17:45
add a comment |
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
Yes, I left that out for brevity. You also of course shouldn't try to call_beginthreadex
from outside of a function!
– Cory Nelson
May 11 '11 at 17:45
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
your function does not return any value. this will most certainly lead to a compiler warning/error.
– Constantinius
May 11 '11 at 17:38
Yes, I left that out for brevity. You also of course shouldn't try to call
_beginthreadex
from outside of a function!– Cory Nelson
May 11 '11 at 17:45
Yes, I left that out for brevity. You also of course shouldn't try to call
_beginthreadex
from outside of a function!– Cory Nelson
May 11 '11 at 17:45
add a comment |
The argument to _beginthreadex must be a function with the __stdcall
calling convention. Your function has __cdecl
. A simple insertion of __stdcall
at the correct spot should solve the problem.
void __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
}
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
add a comment |
The argument to _beginthreadex must be a function with the __stdcall
calling convention. Your function has __cdecl
. A simple insertion of __stdcall
at the correct spot should solve the problem.
void __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
}
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
add a comment |
The argument to _beginthreadex must be a function with the __stdcall
calling convention. Your function has __cdecl
. A simple insertion of __stdcall
at the correct spot should solve the problem.
void __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
}
The argument to _beginthreadex must be a function with the __stdcall
calling convention. Your function has __cdecl
. A simple insertion of __stdcall
at the correct spot should solve the problem.
void __stdcall MyThread(void *data)
{
std::cout << "Hello World!";
}
answered May 11 '11 at 17:30
PuppyPuppy
123k25197410
123k25197410
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
add a comment |
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
I added that in, but I'm still getting this error - error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__stdcall *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:32
add a comment |
The fourth parameter in _beginthreadex(NULL, 0, MyThread, NULL, 0, NULL) are arguments to the function MyThread
Right now you are passing NULL to it so void* data
must be getting a NULL pointer
struct X
{
int a;
int b;
};
X* x = (X*)malloc(sizeof(X));
x->a = 5;
x->b = 6;
_beginthreadex(NULL, 0, MyThread, NULL, x, NULL);
The above code will pass pointer x
to the function MyThread()
.
Do take care of X, as it better should be allocated by malloc or new. Do not create it on stack until you use a thread join
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
add a comment |
The fourth parameter in _beginthreadex(NULL, 0, MyThread, NULL, 0, NULL) are arguments to the function MyThread
Right now you are passing NULL to it so void* data
must be getting a NULL pointer
struct X
{
int a;
int b;
};
X* x = (X*)malloc(sizeof(X));
x->a = 5;
x->b = 6;
_beginthreadex(NULL, 0, MyThread, NULL, x, NULL);
The above code will pass pointer x
to the function MyThread()
.
Do take care of X, as it better should be allocated by malloc or new. Do not create it on stack until you use a thread join
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
add a comment |
The fourth parameter in _beginthreadex(NULL, 0, MyThread, NULL, 0, NULL) are arguments to the function MyThread
Right now you are passing NULL to it so void* data
must be getting a NULL pointer
struct X
{
int a;
int b;
};
X* x = (X*)malloc(sizeof(X));
x->a = 5;
x->b = 6;
_beginthreadex(NULL, 0, MyThread, NULL, x, NULL);
The above code will pass pointer x
to the function MyThread()
.
Do take care of X, as it better should be allocated by malloc or new. Do not create it on stack until you use a thread join
The fourth parameter in _beginthreadex(NULL, 0, MyThread, NULL, 0, NULL) are arguments to the function MyThread
Right now you are passing NULL to it so void* data
must be getting a NULL pointer
struct X
{
int a;
int b;
};
X* x = (X*)malloc(sizeof(X));
x->a = 5;
x->b = 6;
_beginthreadex(NULL, 0, MyThread, NULL, x, NULL);
The above code will pass pointer x
to the function MyThread()
.
Do take care of X, as it better should be allocated by malloc or new. Do not create it on stack until you use a thread join
edited Nov 14 '18 at 13:45
Richard Chambers
9,86724067
9,86724067
answered May 11 '11 at 17:21
MayankMayank
2,40272855
2,40272855
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
add a comment |
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
NULL is a valid void* type isn't it?
– atoMerz
May 11 '11 at 17:29
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
@Atomerz: yeah you are right. I misunderstood the question and did not see the EDIT part of the question
– Mayank
May 11 '11 at 17:59
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f5968076%2fpassing-parameters-to-beginthreadex%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
what does it do? How doesn't it work?
– forsvarir
May 11 '11 at 17:18
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__cdecl *)(void *)' to 'unsigned int (__stdcall *)(void *)'
– Eilidh
May 11 '11 at 17:28
apparently your function needs to return an integer. See my edited post.
– Constantinius
May 11 '11 at 17:35