cpx
cpx

Reputation: 17557

Creating Thread in Win32

Does ThreadFunc() gets called two times here? sometimes I notice a single call and sometimes none at all.

#include <windows.h>
#include <stdio.h>

DWORD WINAPI ThreadFunc(LPVOID);

int main()
{
    HANDLE hThread;
    DWORD threadld;

    hThread = CreateThread(NULL, 0, ThreadFunc, 0, 0, &threadld );
    printf("Thread is running\n");
}

DWORD WINAPI ThreadFunc(LPVOID p)
{
    printf("In ThreadFunc\n");
    return 0;
}

Output 1

Thread is running
In ThreadFunc
In ThreadFunc
Press any key to continue . . .

Output 2

Thread is running
In ThreadFunc
Press any key to continue . . .

Output 3

Thread is running
Press any key to continue . . .

Upvotes: 1

Views: 726

Answers (3)

Alienfluid
Alienfluid

Reputation: 326

No, ThreadFunc should never get called twice. In any case, I believe your code snippet is incomplete - could you post the full code snippet where you are seeing this problem?

Upvotes: 0

pronebird
pronebird

Reputation: 12230

A little addition: use WaitForSingleObject inside main() to give your thread finish a job.

Upvotes: 2

dalle
dalle

Reputation: 18507

In order to call CRT functions, such as printf you should use _beginthread or _beginthreadex instead of CreateThread.

Anyway, the program may end before the thread has the opportunity to output anything.

Upvotes: 4

Related Questions