我正在一个小型的PHP网站上工作.我需要一个易于配置和使用的MySql数据库访问类.
不需要是一个完整的框架,我只需要一个最大的.几节课.
我想在Win32上使用POSIX样式条件变量.我有一些代码需要在XP上运行,所以我不能使用Vista/Server 2008 CONDITION_VARIABLE.
它当前使用伪条件变量类,其基于离开临界区并发信号通知用于信令/唤醒的自动重置事件.为了等待条件变量,它会WaitForSingleObject在事件中离开临界区,然后重新进入临界区.这很好,但它不支持广播,并且在公平性方面可能还有其他问题,我并不太关心.
我们确实使用boost,所以我知道我可以使用boost线程或pthreads-win32,它们支持条件变量,但理想情况下我希望接口是这样的,当我/可以使用它时可以放入Microsoft实现它直接.我已经看到在Win32上实现POSIX条件变量的策略,但"最佳"(最正确)的解决方案使用的是互斥锁,而不是CRITICAL_SECTION.CRITICAL_SECTION在第二部分中有一个带有a的实现的草图,但它并不完整,而其他解决方案与CRITICAL_SECTION我有关,因为文章中列出了他们所关注的问题.
简而言之,我如何在win32上为关键部分实现一个正确的,不一定公平的(但是那将是很好的)条件变量,这样当我可以使用时,我可以放弃Microsoft的实现?
是否仅提供DLL的工具即可提取/生成DLL导出的.h标头?手动键入它们在背面证明很痛苦。
每当有人第一次访问该网站时,我都会在mysql表中存储一个时间戳.
我最终看到这样的数据:
2009-08-02 04:08:27
2009-08-02 04:07:47
2009-08-02 05:58:13
2009-08-02 06:28:23
2009-08-02 06:34:22
2009-08-02 08:23:21
2009-08-02 09:38:56
Run Code Online (Sandbox Code Playgroud)
我想要对这些数据做什么是创建每小时的访问次数.所以在上面的例子中,我将在第4小时到达2次访问,第5小时= 1小时,第6小时2小时,第8小时1等.
我认为最好的方法就是这样做一个for语句:
// a 24 hour loop
for($i = 24; $i > -1; $i--) {
// the query for each hour
$sql = 'SELECT * FROM visits WHERE (DATE(added) = DATE_SUB(CURRENT_DATE(), INTERVAL ' . $i . ' HOUR))'
$res = mysql_query($sql);
$count = mysql_num_rows($res);
// store the number of rows for this loop in the array
$visits[] = $count;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎合乎逻辑......但出于某种原因......它肯定不起作用.
你会怎么做?
当我使用Java开发一个(学术)软件时,我被迫使用一个执行得相当糟糕的API.这意味着对某一组输入数据的此API调用有时永远不会返回.这一定是软件中的一个错误,因为它提供的算法是确定性的,有时会终止于一组数据,有时它会在同一组数据上遇到无限循环......
但是,修复API或重新实现它只是超出范围.我甚至拥有源代码,但API很大程度上依赖于其他未记录且没有源代码的API,并且当时从网络上消失(或者从未在那里?).另一方面,这个"坏"API是解决我遇到的具体问题的唯一一个,所以我真的不得不坚持下去.
问题是:处理API的最干净的方法是什么呢?好吧,讨厌?当我遇到这个问题时,我决定将对API的调用放入一个单独的线程中.然后,另一个线程偶尔会检查此线程是否已终止.如果已经过了一定的时间,我会使用处理线程Thread#stop()并再次开始处理,希望它会在下次返回.现在,我知道(并且当时知道)该方法已被弃用,不得使用.但是在这种学术背景下,软件可能会进入未定义状态而不是崩溃是可以接受的.
忽略已经遇到无限循环的处理线程也是不可接受的,因为它做了一些非常耗费CPU的操作,这会大大减慢用户的机器速度.
我没有尝试的另一种方法是在单独的进程而不是线程中开始处理,因为可以干净地杀死子进程而不会使软件处于不一致状态.或者新SwingWorker课程(尚未提供)可以完成这项工作吗?它有一个cancel()方法,但文档说它"尝试取消执行此任务",所以它看起来也不像是一个可靠的方法.
我正在寻找一个python内置函数(或机制)来将列表分段为所需的段长度(不改变输入列表).这是我已有的代码:
>>> def split_list(list, seg_length):
... inlist = list[:]
... outlist = []
...
... while inlist:
... outlist.append(inlist[0:seg_length])
... inlist[0:seg_length] = []
...
... return outlist
...
>>> alist = range(10)
>>> split_list(alist, 3)
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来检测具有相同进程名称的正在运行的进程的数量。
例如,我运行记事本三遍。
记事本.exe 记事本.exe 记事本.exe
所以它会返回3。
我目前有这些代码来检测正在运行的进程,但不计算其正在运行的进程数量。
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
bool IsProcessRunning(const char *进程名称);
int main()
{
char *notepadRunning = (IsProcessRunning("notepad.exe")) ?“是”:“否”;
std::cout << "记事本正在运行吗?" << notepadRunning;
返回0;
}
bool IsProcessRunning(const char *进程名称)
{
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPPROCESS, 0);
if(Process32First(hSnapshot, &pe32))
{
做
{
if(_tcsicmp(pe32.szExeFile, 进程名) == 0)
{
关闭句柄(hSnapshot);
返回真;
}
while(Process32Next(hSnapshot, &pe32));
}
关闭句柄(hSnapshot);
返回假;
}
任何形式的帮助将不胜感激:)
谢谢。
假设您要在应用程序中创建银行帐户模型.您可以创建一个类BankAccount来执行典型的银行帐户.但是如果你被问到班上的责任是什么,答案是什么?"像银行账户一样?" 那不是很具体.我对建模和责任之间的关系有点困惑.许多"现实世界"的物品似乎没有明确的责任.
什么是开始建模这些概念并保持明确责任的最佳方式?
当我们想要部署Web应用程序时,我们应该使用singleton Object还是使用Static而不是?使用它们的瓶颈是什么?我应该知道内存问题,并发问题和.......
PS:对于那些只是可读的类(应该使用static或Singleton)会发生什么
PS 2:可读写的类会发生什么
我有一个名为table1的表,它有一个使用'ScreenId'和'ActivityItemId'的复合主键.我添加了一个新字段'ProductId',它有一个NOT NULL约束.我想将ProductId添加到复合主键.
我认为这会奏效
db.execute"ALTER TABLE table1 PRIMARY KEY(ScreenId,ActivityItemId,ProductId)"
但我得到一个错误,我认为这种语法只有在创建表时才有效.
任何人都可以帮我解决SQL问题吗?(我不能在这里使用视觉基本解决方案顺便说一下,我实际上是使用ruby接口来运行sql,所以它只需要在SQL中)
谢谢最大