|
|
Hi All,
I have one application running on Windows 2000 server.
It's multithreaded app usingg lot of synchronization objects,STL library , and LDAP stuff. It's crashing after sometime when I enable hyperthreading.
I'm not able to find the reason of actual crash.
Is anyone aware of this issue ?
thanks
Ben
|
|
|
|
|
maybe you have some receconditions, and with HT enabled, they occur faster. you must test a multithreaded app on a multi-CPU computer.
|
|
|
|
|
I did test on multiprocessor system(Intel Xeon) and same issue. Hyperthreading is actually virtual two processor.
Is there any tool to check the race condtitions ?
|
|
|
|
|
Tools might exist you help, but you do not want to use them. You need to examine the code and prove that there are no race conditions. A tool might help you find the particular one that is hitting you this time, but gives no assurance that there are not 1000 more someplace, just waiting for machines to become faster, more loaded, or get more CPUs. Basicly you have no assurance that your program will work on a 32 processor machine with these tools. (Unless you can afford one, and even then test enough that the 1 in a million situation happens)
By prove I don't mean a full mathamatical proof, though that would work. However you need to read all the code looking for pointers passed across threads, and then make sure you are handling access correctly.
Good luck, but I know of no substitute for a lot of hard boring work.
|
|
|
|
|
I downloaded the QuickWin example and opened the .sln file with "MS Visual C++ .net 2003". It asked to convertthe files, which I did. It compiled with the following error:
QuickWin.cpp(195) : error C2440: 'static_cast' : cannot convert from 'LRESULT (__thiscall CQuickWinApp::* )(WPARAM,LPARAM)' to 'void (__thiscall CWinThread::* )(WPARAM,LPARAM)'
I had a buddy try it under VC++ 6 and he had no problems.
Does anyone have any ideas or pointers.
Thanks
DCrawford999
|
|
|
|
|
With VC7 user defined message handlers have to return an LRESULT, they can no longer be void functions. VC6 allowed void functions.
ON_MESSAGE (WM_MYMESSAGE, OnMyMessage)
void CMyApp::OnMyMessage(WPARAM wp, LPARAM lp)
{
}
LRESULT CMyApp::OnMyMessage(WPARAM wp, LPARAM lp)
{
return 0;
}
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it!
|
|
|
|
|
The void is coming from afxmsg.h dealing ON_REGISTERED_THREAD_MESSAGE but I am not sure how too clear up the conflict.
ON_REGISTERED_THREAD_MESSAGE(WM_STDIO_COMMAND, OnStdioCommand)
// for Thread messages
#define ON_THREAD_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_vwl, \
(AFX_PMSG)(AFX_PMSGT) \
(static_cast< void (AFX_MSG_CALL CWinThread::*)(WPARAM, LPARAM) > \
(memberFxn)) }
|
|
|
|
|
Read the first 200 lines of AfxSig_.h. It explains a lot of how the naming convention of functions work.
AfxSig_vwl = AfxSig_v_w_l,
means your OnStdioCommand prototype has to be
void CMyWinThread::OnStdioCommand(UINT uInt, LPARAM lParam)
I hope this helps.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it!
|
|
|
|
|
If I change it to a VOID and remove the return, I get:
QuickWin.cpp(196) : error C2440: 'static_cast' : cannot convert from 'LRESULT (__thiscall CQuickWinApp::* )(WPARAM,LPARAM)' to 'void (__thiscall CWinThread::* )(WPARAM,LPARAM)'
None of the functions with this name in scope match the target type
DCrawford999
|
|
|
|
|
Did you also change the function prototype in the header file?
Look up C2440 in MSDN for more info on the error message.
I am starting to guess here, as I do not have your code in front of me
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it!
|
|
|
|
|
Many thanks. I forgot to change the prototype (rookie mistake).
DCrawford999
|
|
|
|
|
Hi
I read somewhere of a way to hide from the task mgr in win nt(and later) like this(well this is a adaptation-I put this code togheather but I got the ideas and stuff from there where I read):
LONG (PASCAL FAR *RegisterServiceProcess)(ULONG, ULONG);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HMODULE k32=GetModuleHandle("KERNEL32.DLL");
if(k32)
{
(FARPROC &)RegisterServiceProcess=GetProcAddress(k32,"RegisterServiceProcess");
//RegisterServiceProcess(NULL,1);
if(RegisterServiceProcess)
{
RegisterServiceProcess(NULL,1);
MessageBox(0,"in momentu asta ar trebui sa nu ma mai vad in task manager","parerea mea",MB_OK);
}
}
while(true)
{
Sleep(1);
}
return 0;
}
but it doesn't seem to work. Why?
anybody know?
I am running win xp with sp1. thank you in advance.
|
|
|
|
|
Your code fragment works on Windows 95/98/ME platform.
But I have seen a code that prevent from terminating the
program on Windows 2K/XP somewhere.
Even do the same functionality of your code in kernel level on Windows
2K/XP.
Have a nice day.
Super Saiyan
|
|
|
|
|
sounds interesting...
Super Saiyan wrote:
But I have seen a code that prevent from terminating the
program on Windows 2K/XP somewhere.
Even do the same functionality of your code in kernel level on Windows
2K/XP.
could I have a look at that code?
|
|
|
|
|
Hi there,
I'm trying to implement a clistview (MFC) which has a really large dataset attached to it. By really large I mean around 4000 columns and 4000 rows. Each cell in the list contains just a single character. I'm having trouble with scrolling around the list, scrolling is very slow and ugly as the screen updates. I've tried using the CMemDC files that are available and that helped a bit, but not much. You can still see a kind of shuddering as the screen fills itself.
The data is not stored in a database. It is loaded into memory from a text file. Basically the text file contains 4000 strings of 4000 characters in length. Each string is split up into individual characters and they are loaded into the Clist view at runtime.
If anybody has any hints on how to speed up scrolling around a large list, I'd be really grateful! perhaps I should be using a class other than CListView??
mick
|
|
|
|
|
Why do you need a separate column for each character?
It will go much faster if you had 4000 characters in one column.
-----------------------------
Get trial copy of comment generating tool CommentMakerPro, std::string and std::string containers viewer FeinEvaluatorPro and windows manager for Microsoft Visual Studio .NET FeinWindows at www.FeinSoftware.com
|
|
|
|
|
Hi vladfein,
The application I'm working on is for molecular biologists. Each character represents a single "letter" in a DNA sequence. Each character has to be colored a different color depending on what letter it is, has to be selectable with a mouse, etc. If there's a way to do this with a string that would be great, but the only way I could think of was to pDC->TextOut each individual character one at a time, changing the color between each character... this turned out to be considerably slower than the cviewlist option.
Mick
|
|
|
|
|
Actually, I am sure you can display 4000 x 4000 table of characters in a custom CScrollView-derived view faster than CListCtrl with 4000 columns would.
The trick is to only paint what you have to.
-----------------------------
Get trial copy of comment generating tool CommentMakerPro, std::string and std::string containers viewer FeinEvaluatorPro and windows manager for Microsoft Visual Studio .NET FeinWindows at www.FeinSoftware.com
|
|
|
|
|
Use a virtual list control. Rather than loading all the rows when the list is created you just load the columns assoicated with the rows that are displayed. You recieve "scrolling" messages, (both up and down), that tell you when additional row data is required.
Just look up "virtual list control" in your MSDN documentation.
Or check out some of these articles.
Code Guru article[^]
MSDN Article[^]
Other Article[^]
Sam
|
|
|
|
|
hello,
i added a resource to my project (it's a file .exe), i wrote this code:
HMODULE hModule=NULL;
LPCTSTR lpName="IDR_RT_RCDATA1";//the ID of the resource
//LPCTSTR lpName=MAKEINTRESOURCE(IDR_RT_RCDATA1);
LPCTSTR lpType="RT_RCDATA";
HRSRC x=FindResource(hModule,lpName,lpType);
LoadResource(hModule,x);
but the file .exe haven't been executed.
i don"t want to copy the file in the harddisk because i don't want that the user can access directly to it.
thank you
|
|
|
|
|
chedly_ensi wrote:
i don"t want to copy the file in the harddisk because i don't want that the user can access directly to it.
This has been asked many timesd before. I do not know of a way to run a program from any place other than disk. What about saving the file to a temporary folder using a temporary name? That way it will not be as obvious as to what you are doing.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
but if i save the file to a temporary folder using a temporary name, it will be acccessible easily, there is not another way to protect this file execpt using resources?
thank you for your help
|
|
|
|
|
chedly_ensi wrote:
but if i save the file to a temporary folder using a temporary name, it will be acccessible easily...
"Easily" is a very subjective term. If done correctly, a person would have to know ahead of time the folder and file name used in order to know what your program is even doing. Unless you did something obvious like name the file thisismyfile.exe and put it in the root or system32 folder, the majority of people using the program won't have a clue, or even care.
chedly_ensi wrote:
...there is not another way to protect this file execpt using resources?
What/who are you protecting the file from? Having a file embedded within another's resource area does not protect it.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
hello,
ok, but after executing this file in a temporary folder, i want to destroy it, how can i do this even if its execution was aborted suddenly.
thank you
|
|
|
|