MCPcopy Create free account
hub / github.com/MITK/MITK / ThreadedFunction

Function ThreadedFunction

Modules/Core/test/mitkITKThreadingTest.cpp:38–87  ·  view source on GitHub ↗

this will be executed in a thread

Source from the content-addressed store, hash-verified

36
37// this will be executed in a thread
38ITK_THREAD_RETURN_TYPE ThreadedFunction(void *param)
39{
40 std::cout << "Getting thread info data... ";
41 itk::MultiThreader::ThreadInfoStruct *threadInfo = static_cast<itk::MultiThreader::ThreadInfoStruct *>(param);
42
43 if (!threadInfo)
44 {
45 std::cout << "[FAILED]" << std::endl;
46 exit(EXIT_FAILURE);
47 }
48 std::cout << "[PASSED]" << std::endl;
49
50 std::cout << "Getting user data from thread... ";
51 UserData *userData = static_cast<UserData *>(threadInfo->UserData);
52
53 if (!userData)
54 {
55 std::cout << "[FAILED]" << std::endl;
56 exit(EXIT_FAILURE);
57 }
58 std::cout << "[PASSED]" << std::endl;
59
60 // inc variable FOR main thread
61 std::cout << "generate 10000 results";
62 for (int i = 1; i <= 10000; ++i)
63 {
64 userData->mutex->Lock();
65 *(userData->intPointer) += 1; // generate one "result"
66 userData->mutex->Unlock();
67 userData->semaphore->Up(); // signal "work done"
68 }
69 std::cout << "[PASSED]" << std::endl;
70
71 std::cout << "waiting for main thread's signal... " << std::endl;
72 ;
73 userData->mayIRun->Down(); // wait for signal
74 std::cout << "got main thread's signal... " << std::endl;
75
76 // inc variable TOGETHER WITH main thread
77 for (int i = 1; i <= 10000; ++i)
78 {
79 userData->mutex->Lock();
80 *(userData->intPointer) += 1;
81 userData->mutex->Unlock();
82 }
83
84 userData->semaphore->Up(); // signal "job done"
85
86 return ITK_THREAD_RETURN_VALUE;
87}
88
89int mitkITKThreadingTest(int /*argc*/, char * /*argv*/ [])
90{

Callers

nothing calls this directly

Calls 2

LockMethod · 0.45
UnlockMethod · 0.45

Tested by

no test coverage detected