how thread work in the os ?
-
Hi ! In my application when i debug it. it gives me the the following result in the call stack. >
msvcr80d.dll!strlen(unsigned char * buf=0x0235b848) Line 81 Asm
//crashed here msvcp80d.dll!std::char_traits::length(const char * _First=0x00000000) Line 559 + 0x9 bytes C++ msvcp80d.dll!std::basic_string,std::allocator >::assign(const char * _Ptr=0x00000000) Line 1042 + 0x9 bytes C++ msvcp80d.dll!std::basic_string,std::allocator >::basic_string,std::allocator >(const char * _Ptr=0x00000000) Line 644 C++ DRMClient.exe!openutils::WebForm::putVariable(const char * var_name=0x0047f694, const char * value=0x00000000) Line 142 + 0x12 bytes C++ DRMClient.exe!Package::GenerateConfigurePackageRequest(std::basic_string,std::allocator > uid="", std::basic_string,std::allocator > host="", std::basic_string,std::allocator > scriptFile="", unsigned short port=1100, HWND__ * hwndParent=0x00230a58, std::basic_string,std::allocator > sInitPackagingResponse="", wchar_t * w_KeyID=0x003c57b8, HWND__ * hList=0x00080e0c, TagEditor * _ProtectSet=0x00488ab0, HWND__ * hWndinoutfiledir=0x00040b72, wchar_t * pszOutFile=0x0012c91c) Line 872 C++ DRMClient.exe!Package::EncodeMediaContent(wchar_t * pszInFile=0x0012e7f0, wchar_t * pszOutFile=0x0012c91c, HWND__ * hwndParent=0x00230a58, std::basic_string,std::allocator > Host="", std::basic_string,std::allocator > UserID="", std::basic_string,std::allocator > InitPackageRequest="", std::basic_string,std::allocator > ScriptFile="", unsigned short Port=1100, HWND__ * hList=0x00080e0c, TagEditor * _ProtectSet=0x00488ab0, HWND__ * hWndinoutfiledir=0x00040b72, HWND__ * hwndEncrypt=0x00230a58) Line 964 + 0xfc bytes C++ DRMClient.exe!Thread(void * pArguments=0x0012c874) Line 145 + 0x12d bytes C++ msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C msvcr80d.dll!_threadstartex(void * ptd=0x003c9fe0) Line 331 C I didnt understad why I got the first thread value every time. and then the application crashed ! :zzz:"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
Hi ! In my application when i debug it. it gives me the the following result in the call stack. >
msvcr80d.dll!strlen(unsigned char * buf=0x0235b848) Line 81 Asm
//crashed here msvcp80d.dll!std::char_traits::length(const char * _First=0x00000000) Line 559 + 0x9 bytes C++ msvcp80d.dll!std::basic_string,std::allocator >::assign(const char * _Ptr=0x00000000) Line 1042 + 0x9 bytes C++ msvcp80d.dll!std::basic_string,std::allocator >::basic_string,std::allocator >(const char * _Ptr=0x00000000) Line 644 C++ DRMClient.exe!openutils::WebForm::putVariable(const char * var_name=0x0047f694, const char * value=0x00000000) Line 142 + 0x12 bytes C++ DRMClient.exe!Package::GenerateConfigurePackageRequest(std::basic_string,std::allocator > uid="", std::basic_string,std::allocator > host="", std::basic_string,std::allocator > scriptFile="", unsigned short port=1100, HWND__ * hwndParent=0x00230a58, std::basic_string,std::allocator > sInitPackagingResponse="", wchar_t * w_KeyID=0x003c57b8, HWND__ * hList=0x00080e0c, TagEditor * _ProtectSet=0x00488ab0, HWND__ * hWndinoutfiledir=0x00040b72, wchar_t * pszOutFile=0x0012c91c) Line 872 C++ DRMClient.exe!Package::EncodeMediaContent(wchar_t * pszInFile=0x0012e7f0, wchar_t * pszOutFile=0x0012c91c, HWND__ * hwndParent=0x00230a58, std::basic_string,std::allocator > Host="", std::basic_string,std::allocator > UserID="", std::basic_string,std::allocator > InitPackageRequest="", std::basic_string,std::allocator > ScriptFile="", unsigned short Port=1100, HWND__ * hList=0x00080e0c, TagEditor * _ProtectSet=0x00488ab0, HWND__ * hWndinoutfiledir=0x00040b72, HWND__ * hwndEncrypt=0x00230a58) Line 964 + 0xfc bytes C++ DRMClient.exe!Thread(void * pArguments=0x0012c874) Line 145 + 0x12d bytes C++ msvcr80d.dll!_callthreadstartex() Line 348 + 0xf bytes C msvcr80d.dll!_threadstartex(void * ptd=0x003c9fe0) Line 331 C I didnt understad why I got the first thread value every time. and then the application crashed ! :zzz:"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
From the title I guess you have a multithreading app, isn't it? The errors say nothing valueable unless you describe at which conditions you got them. Here I suspect you have a problem with synchronization issues [particularly, your std::string object gets corrupted by concurrent accesses within the threads]..
-- ===== Arman
-
From the title I guess you have a multithreading app, isn't it? The errors say nothing valueable unless you describe at which conditions you got them. Here I suspect you have a problem with synchronization issues [particularly, your std::string object gets corrupted by concurrent accesses within the threads]..
-- ===== Arman
Arman Z. Sahakyan wrote:
From the title I guess you have a multithreading app, isn't it? The errors say nothing valueable unless you describe at which conditions you got them.
ya!
Arman Z. Sahakyan wrote:
Here I suspect you have a problem with synchronization issues [particularly, your std::string object gets corrupted by concurrent accesses within the threads]..
yes! when I debug, some time i got some strange values which is actually related with some other thread.
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
Arman Z. Sahakyan wrote:
From the title I guess you have a multithreading app, isn't it? The errors say nothing valueable unless you describe at which conditions you got them.
ya!
Arman Z. Sahakyan wrote:
Here I suspect you have a problem with synchronization issues [particularly, your std::string object gets corrupted by concurrent accesses within the threads]..
yes! when I debug, some time i got some strange values which is actually related with some other thread.
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
Are you doing proper syncronization? I know you do not. :) You should prevent multiple accesses to your string data by giving the monopoly to a single thread at a given time period. std classes are not thread safe. This means you should yourself take care of synchronizing their usage. See here[^] about synchronization issues.
-- ===== Arman
-
Are you doing proper syncronization? I know you do not. :) You should prevent multiple accesses to your string data by giving the monopoly to a single thread at a given time period. std classes are not thread safe. This means you should yourself take care of synchronizing their usage. See here[^] about synchronization issues.
-- ===== Arman
oh please dont :) because my condition is like :((. and after your answer :doh:. but thanks for that this is for u my dear friend :rose: first I will read your code i will understand it properly then i will mail you if I will not get the result ok thanks once again !
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
oh please dont :) because my condition is like :((. and after your answer :doh:. but thanks for that this is for u my dear friend :rose: first I will read your code i will understand it properly then i will mail you if I will not get the result ok thanks once again !
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
This is in response to your email to me. I have not worked too much on threads, but will surely help you if I could. My suggestion is that you post it at CP, and you will get plenty of us. Moreover, threads are not something that I've mastered. :)
-
Are you doing proper syncronization? I know you do not. :) You should prevent multiple accesses to your string data by giving the monopoly to a single thread at a given time period. std classes are not thread safe. This means you should yourself take care of synchronizing their usage. See here[^] about synchronization issues.
-- ===== Arman
I have tried out my way but not getting the proper result. string problem is as remain as but even dw never goes in the any of the cas like case WAIT_OBJECT_0 + 1: +2 or +3. what should I do ? how can i manage it ?
unsigned __stdcall Thread(void* pArguments ) { HRESULT hr=NULL; struct argument_list *Lparam= (argument_list *)pArguments ; Package pkg; DWORD dw=WaitForMultipleObjects(ListBoxItemCount,hThread,TRUE,5000 ); switch (dw) { case WAIT_OBJECT_0 + 0: // a process with h[0] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_OBJECT_0 + 1: // a process with h[1] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_OBJECT_0 + 2: // a process with h[2] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_FAILED: // failure break; case WAIT_TIMEOUT: // no processes exited during 5000ms break; } //printf( "In second thread...\n" ); if(hr==S_OK) { MessageBox(0,L"thread gone finished" ,L"therad",0); _endthreadex( 0 ); }
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
I have tried out my way but not getting the proper result. string problem is as remain as but even dw never goes in the any of the cas like case WAIT_OBJECT_0 + 1: +2 or +3. what should I do ? how can i manage it ?
unsigned __stdcall Thread(void* pArguments ) { HRESULT hr=NULL; struct argument_list *Lparam= (argument_list *)pArguments ; Package pkg; DWORD dw=WaitForMultipleObjects(ListBoxItemCount,hThread,TRUE,5000 ); switch (dw) { case WAIT_OBJECT_0 + 0: // a process with h[0] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_OBJECT_0 + 1: // a process with h[1] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_OBJECT_0 + 2: // a process with h[2] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_FAILED: // failure break; case WAIT_TIMEOUT: // no processes exited during 5000ms break; } //printf( "In second thread...\n" ); if(hr==S_OK) { MessageBox(0,L"thread gone finished" ,L"therad",0); _endthreadex( 0 ); }
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
Supposedly the case WAIT_FAILED works. Anyway ... A couple of questions; DWORD dw=WaitForMultipleObjects(ListBoxItemCount,hThread,TRUE,5000 ); What you want to do with this code? Where does LitBoxItemCount come from? Where does hThread come from? How many threads do you have? I need to know the answers of these questions before I can say the reasons of your problem.
-- ===== Arman
-
Supposedly the case WAIT_FAILED works. Anyway ... A couple of questions; DWORD dw=WaitForMultipleObjects(ListBoxItemCount,hThread,TRUE,5000 ); What you want to do with this code? Where does LitBoxItemCount come from? Where does hThread come from? How many threads do you have? I need to know the answers of these questions before I can say the reasons of your problem.
-- ===== Arman
May I send you detail on your email? because the proper format and written mail is ready. May I ...?
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
May I send you detail on your email? because the proper format and written mail is ready. May I ...?
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
have you got any idea or do you need any feed back?
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
have you got any idea or do you need any feed back?
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
This is a multithreading issue and to overcome one needs a proper level of detailed information. What you have posted as code didn't cover all the details and thus you should provide more details. I've already asked about the questions that are not clear [at least to me].
-- ===== Arman
-
Supposedly the case WAIT_FAILED works. Anyway ... A couple of questions; DWORD dw=WaitForMultipleObjects(ListBoxItemCount,hThread,TRUE,5000 ); What you want to do with this code? Where does LitBoxItemCount come from? Where does hThread come from? How many threads do you have? I need to know the answers of these questions before I can say the reasons of your problem.
-- ===== Arman
Arman Z. Sahakyan wrote:
What you want to do with this code? Where does LitBoxItemCount come from? Where does hThread come from? How many threads do you have?
What you want to do with this code?
with this code i am tring to synchronize my threads.
Where does LitBoxItemCount come from?
this will come from the listview control (itemcount).I put in my code as global so Global function Thread can use it.
Where does hThread come from?
hThread is array of handle which assigne the thread.
How many threads do you have?
well ,for sample application have created the three worker thread (means if there are total three files in the listview control so itemcount will be three means LitBoxItemCount)
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
This is a multithreading issue and to overcome one needs a proper level of detailed information. What you have posted as code didn't cover all the details and thus you should provide more details. I've already asked about the questions that are not clear [at least to me].
-- ===== Arman
would you need any thing more specific information? I am ready to provide you.
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India
-
This is a multithreading issue and to overcome one needs a proper level of detailed information. What you have posted as code didn't cover all the details and thus you should provide more details. I've already asked about the questions that are not clear [at least to me].
-- ===== Arman
just one question. I need your little help. when and how the thread manage? Suppose I have four thread hThread[0] = (HANDLE)_beginthreadex(NULL, 0, &Thread ,&l,NULL, &threadID); hThread[1] = (HANDLE)_beginthreadex(NULL, 0, &Thread ,&l,NULL, &threadID); hThread[2] = (HANDLE)_beginthreadex(NULL, 0, &Thread ,&l,NULL, &threadID); hThread[3] = (HANDLE)_beginthreadex(NULL, 0, &Thread ,&l,NULL, &threadID); and the global function
unsigned __stdcall Thread(void* pArguments ) { HRESULT hr=NULL; struct argument_list *Lparam= (argument_list *)pArguments ; Package pkg; threadID++; DWORD dw=WaitForMultipleObjects(ListBoxItemCount,hThread[threadID],TRUE,5000 ); switch (dw) { case WAIT_OBJECT_0 + 0: // a process with h[0] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_OBJECT_0 + 1: // a process with h[1] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_OBJECT_0 + 2: // a process with h[2] descriptor has exited hr=pkg.EncodeMediaContent(Lparam->pszInFile,Lparam->pszOutFil,Lparam->hwndParent,Lparam->Host,Lparam->UserID,Lparam->InitPackageRequest,Lparam->ScriptFile,Lparam->Port,Lparam->hList,Lparam->_ProtectSet,Lparam->hWndinoutfiledir,Lparam->hwndEncrypt); break; case WAIT_FAILED: // failure break; case WAIT_TIMEOUT: // no processes exited during 5000ms break; } //printf( "In second thread...\n" ); if(hr==S_OK) { MessageBox(0,L"thread gone finished" ,L"therad",0); _endthreadex( 0 ); } threadID--; return 0; }
how can i decide the when which thread come at hThread[],
"Success lies not in the result , But in the efforts !!!!!" Amit Mistry - petlad -Gujarat-India