|
Sunnygirl wrote:
i make a 'COMMAND' function with the wizzard in the old class: 'MyProgrammView'
If you want to have IamHere called even when no child is open, you must catch the WM_COMMAND in CMainFrame, not in MyProgrammView.
rechi
|
|
|
|
|
Does anyone know of functions or a library (freeware or commercial) for scanning PCI devices on a PC ?
I need to write some code to access various I/O devices installed in PCs.
Thanks.
Elaine.
Would you like to meet my teddy bear ?
|
|
|
|
|
What are you doing? A driver? A software which needs to enumerate hardware?
The DDK have functions for this, in case of the first, although I'm not a specialist on it.
In the case of a high level program which needs to enumerate hardware, you could use WMI.
I see dumb people
|
|
|
|
|
|
Here is a function I wrote to locate a couple of (identical except internal serial number) cards for a
device driver I had to write. It had to be part of a device driver, but as you will probably want to
be doing kernel level stuff anyway, this shouldn't be a problem
Iain.
<br />
typedef struct {<br />
ULONG BaseAddress;<br />
UCHAR IRQ;<br />
} Iain_Hardware;<br />
<br />
#define CARD_VENDORID (0x494f)<br />
#define CARD_DEVICEID (0x0e60)<br />
<br />
USHORT iain_LocateHardware(struct Iain_Hardware *pHardware, USHORT nMaxCards)
{<br />
PCI_COMMON_CONFIG pciConfig;<br />
INTERFACE_TYPE BusType = PCIBus;<br />
<br />
ULONG uReturn, SlotNumber, BusNumber = 0;<br />
USHORT nFound = 0;<br />
<br />
if (pHardware == NULL)<br />
return FALSE;<br />
<br />
for (SlotNumber = 0; (SlotNumber < 32) && (nFound < nMaxCards); SlotNumber++)<br />
{<br />
uReturn = HalGetBusData (PCIConfiguration, 0, SlotNumber, &pciConfig, sizeof (pciConfig));<br />
if (uReturn == 0)<br />
break;<br />
if (uReturn < 4)<br />
continue;<br />
<br />
if (pciConfig.VendorID != CARD_VENDORID)
continue;<br />
if (pciConfig.DeviceID != CARD_DEVICEID)
continue;<br />
<br />
pHardware [nFound].BaseAddress = pciConfig.u.type0.BaseAddresses[2] & 0xFFF8;<br />
pHardware [nFound].IRQ = pciConfig.u.type0.InterruptLine;<br />
<br />
{<br />
int a, b, c;<br />
a = nFound;<br />
b = pHardware [nFound].BaseAddress;<br />
c = pHardware [nFound].IRQ;<br />
DbgPrint ("Found Card %i at %x, IRQ=%i\n", a, b, c);<br />
}<br />
<br />
nFound++;<br />
}<br />
<br />
return nFound;<br />
}<br />
|
|
|
|
|
Trollslayer wrote:
Does anyone know of functions or a library (freeware or commercial) for scanning PCI devices on a PC ?
You may need to look into the DDK, take a look at
Microsoft's PCI Technology[^] site.
Nick Parker
Not everything that can be counted counts, and not everything that counts can be counted. - Albert Einstein
|
|
|
|
|
Yes, Linux
"My opinions may have changed, but not the fact that I am right."
Found in the sig of Herbert Kaminski
|
|
|
|
|
Hello,
I have an application that spawns multiple CWinThreads in a loop.. I have absolute no problems on my development box but other machines with out visual studio are having problems..
I spawn somewhere between 5 and 60 threads every 30 seconds.. On non-development boxes some of these threads don't close, so after 10 to 12 hours I show my main process with 30+ threads and it should only have 6.. How can I trouble shoot this problem on these boxes? The thread is very simple it performs a few functions then I do a PostQuitMessage(0).. I even put a timer in the UI thread so that if it doesn't exit in 30 seconds it sends its self a PostQuitMessage(0)..
It's just strange, my development box works perfect.. but other workstations are seeing threads that don't exit..
Any ideas?
Rob
|
|
|
|
|
You're building UI thread, right? Are you sure they need UI threads, or can you just go with worker threads?
Anyway, my guess as to why they don't quit is because you're somehow tying up the threads' message pump. If no messages can be processed, then the WM_QUIT message will not be received and the thread will not end. I have no clue as to why it works fine on your box. It may help to show some code.
Also, 60 sounds like a high number of threads for one process. It seems like the CPU will be sitting there doing a lot of context switching while allocating time for all those threads. You may want to use a more efficient method, like a thread pool, to keep the max down, to say, 20 threads.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
Alvaro Mendez wrote:
You're building UI thread, right? Are you sure they need UI threads, or can you just go with worker threads?
I am using sockets inside these threads.. I was told/heard/read that when ever you are using sockets in a seperate thread you have to use a UI thread because of the message pump.. Basically I have a server app that is going to sit on hundereds of machines.. once every 30 seconds I spawn UI threads to make contact with all the other servers. Once the connection is made (or not made) the servers exchange status and the UI thread exits.. It's really quite simple.. I do all the error checking on the network for failures etc.. if anything goes wrong I post a quit message.. the longest a thread should stay alive should be around 30 seconds.. thats why I put the timer in the thread..
I'll take a look into thread pools (never used them) but they sound nice
I could put a message pump into the thread.. Do you think this may help the thread process messages if something is tying it up? I can post code if you think that would help..
Thanks,
Rob
|
|
|
|
|
What is the reason for a UI thread? For data processing including socket data, I recommend worker threads. Every process has a main thread that serves as a UI thread. Use itto process messages.
Kuphryn
|
|
|
|
|
Rob, I think for a case like this, where you have all these threads running around, and working differently accross machines, your best bet is to use a logging mechanism to determine what's going on. In other words, sprinkle trace messages all over the code (for your threads) and write them to one or more log files to tell you what's going on. It's the only reliable way to debug this stuff. Of course, be sure to have the ability to easily disable them later on whenever you've worked out the kinks.
I'm not sure about needing UI threads for sockets. I'm not experienced with sockets.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
I have an avi files which run o.k. on window 95'. When we put it on windows 2000 it has a strange behavior. (It start operating without any command - at least not one that I can see or get in the code).
The avi is running on an Active X.
I have created a new avi file which has the same no. of frames but is larger than the old one (The old one is 2M and the new one is 14M) and it run well.
If you know what can be the diffrences and why it behaves like this, or how can I create a good avi file which is also small, please let me know.
|
|
|
|
|
I'm using VC.Net with ATL/WTL... But I don't think the problem is in the ATL/WTL! I'm using WinXP sp1 in Italiano (my native language). Here in Italy we use the "," (comma) as decimal point (so we write 1.000,95 instead of 1,000.95).
I've added a decimal tab stop to my RichEdit and it's working well... for an american! (it uses the . instead of the , as decimal separator)... My Windows is currectly setted (other program write 1.000,95 correctly!). How can I make the Richedit work differently?
Thanks
Max
|
|
|
|
|
Hi
I have CPropertySheet (it contains few pages, nothing unusual) modal dialog. After I add my pages I call DoModal. My CPropertySheet can also display another instance of itself. The problem is that newly created dialog is positioned exactly in the same position as the calling dialog, so one can miss that a new dialog has been created. My question is: how can I position newly created dialog so it won't cover the old one? Thanks in advance for any hints.
Mariusz Popiolek
|
|
|
|
|
Firstly make a new static dialog element as "area descriptor".
Then get the position of the new element as a CRect, translate it to client and move the property page to the new position.
Sample code:
CRect rcDlgs;
GetDlgItem(IDC_AREA_PAGES)->GetWindowRect(rcDlgs);
ScreenToClient(rcDlgs);
m_propertyWindow.MoveWindow(rcDlgs);
-Dominik
|
|
|
|
|
I found easier solution (at first I was hoping that there is some trivial solution, for example setting some dialog style,but I think there is not).
In OnInitDialog:
RECT rect;
this->GetWindowRect(&rect);
rect.left += 20;
rect.right += 20;
rect.top += 20;
rect.bottom += 20;
this->MoveWindow(&rect);
It cause that newly opened dialogs are cascading (that is exactly what I wanted to do).
Anyway, thanks Dominik.
I tested it on CDialog but I think that it should work with CPropertySheet
Mariusz Popiolek
|
|
|
|
|
Hi.
I'll trying to open simple file dialog from view of my single document application. MSDN->Help...
////////////////////// begin ///////////////////////////////////////
// szFilters is a text string that includes two file name filters:
// "*.my" for "MyType Files" and "*.*' for "All Files."
char szFilters[]=
"MyType Files (*.my)|*.my|All Files (*.*)|*.*||";
// Create an Open dialog; the default file name extension is ".my".
CFileDialog *fileDlg =new CFileDialog(TRUE, "my", "*.my",
OFN_EXPLORER | OFN_HIDEREADONLY, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
if( fileDlg->DoModal ()==IDOK )
{
CString pathName = fileDlg->GetPathName();
// Implement opening and reading file in here. ...
//Change the window's title to the opened file's title.
CString fileName = fileDlg->GetFileTitle ();
}
delete fileDlg;
/////////////////////////////// end ////////////////////////////////
fileDlg->DoModal() return IDCANCEL and dialog window is not showed...
I try to create dialog based application, insert this block of code and get my dialog... Where is mistake????
This bug is ONLY on windows NT4 server... XP works fine.
Used Visual Studio .NET (VC7++)
Thanks for help and sorry for bad english.
|
|
|
|
|
I'm sorry I can't help you. But I have one question: Why do you create the file dialog on the heap? It's enough to create the variable on the stack since the dialog is modal anyway
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I agree with you... I've just tested.
In original MSDN article dialog created normaly, as variable.
I will correct my post...
|
|
|
|
|
try changing this :
CFileDialog *fileDlg = new CFileDialog(TRUE, "my", "*.my",
OFN_EXPLORER | OFN_HIDEREADONLY,
szFilters, <code>this</code>);
to either
NULL
or
AfxGetMainWnd()
- Nitron
"Those that say a task is impossible shouldn't interrupt the ones who are doing it." - Chinese Proverb
|
|
|
|
|
Thanks for your reply...
"NULL", "AfxGetMainWnd()","this" perfectly work, but under win2k and XP.
NT4 don't want to show dialog. DoModal() returns IDCANCEL after call.
|
|
|
|
|
Andrew Medvedev wrote:
NT4 don't want to show dialog.
Hmm... I just noticed u said you are using VS7. I wonder if it's a .net thing. Try re-posting in the .net forum and see if anyone there has experienced this. Good luck.
- Nitron
"Those that say a task is impossible shouldn't interrupt the ones who are doing it." - Chinese Proverb
|
|
|
|
|
Hy everyone!
does anybody can give me some help?
I want that an window of my application flicker in taskbar (if minimized)... does have any message that I can send to it?
thanks!
ps.: sorry my english
-=Ricky=-
|
|
|
|
|
Take a look at the FlashWindow and FlashWindowEx functions on MSDN.
Richard
|
|
|
|