views:

55

answers:

3

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 . . .
+3  A: 

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.

dalle
+2  A: 

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

Andy
A: 

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?

Alienfluid